2022. 7. 28. 14:02ㆍ개발공부/리액트
https://www.youtube.com/watch?v=s3cDPbcoy_4&list=PLuHgQVnccGMCOGstdDZvH41x0Vtvwyxu7&index=6&t=1s
1. Header 클릭 시 경고창 띄우기
function App() {
const topics = [
{id:1, title:'html', body:'html os ...'},
{id:2, title:'css', body:'css os ...'},
{id:3, title:'js', body:'js os ...'},
]
return (
<div>
<Header title="WEB" onChangeMode={function(){
alert('Header');
}}></Header>
<Nav topics={topics}></Nav>
<Article title="Welcome" body="Hello, WEB"></Article>
</div>
);
}
onChangeMode 라는 prop에 파라미터로 함수를 넘긴다.
헤더 컴포넌트 안에서 컴포넌트가 함수를 호출해서 헤더를 클릭했을 때 해야하는 작업을 실행하게 한다.
function Header(props) {
return <header>
<h1><a href='/' onClick={function(event){
event.preventDefault();
}}>{props.title}</a></h1>
</header>
}
onClick은 Header를 눌렀을 때 함수가 호출되게 한다.
a태그를 눌렀을 때 페이지 리로드가 되지 않게 하기 위해서 함수의 첫 번째 파라미터로 event 객체를 넘긴다.
event 객체는 event상황을 제어할 수 있는 여러 가지 정보와 기능이 있다.
event.preventDefault(); //해당 태그의 기본적인 이벤트를 방지하는 기능
props.onChangeMode(); //prop으로 주어진 함수를 호출하는 부분
preventDefault()는 a태그를 클릭했을 때 발생하는 기본적인 이벤트를 방지하는 기능이다.
function App()에서 작성한 함수를 불러오기 위해서 props.onChangeMode();를 해준다.
function Header(props) {
return <header>
<h1><a href='/' onClick={(event)=>{
event.preventDefault();
props.onChangeMode();
}}>{props.title}</a></h1>
</header>
}
function App() {
const topics = [
{id:1, title:'html', body:'html os ...'},
{id:2, title:'css', body:'css os ...'},
{id:3, title:'js', body:'js os ...'},
]
return (
<div>
<Header title="WEB" onChangeMode={()=>{
alert('Header');
}}></Header>
<Nav topics={topics}></Nav>
<Article title="Welcome" body="Hello, WEB"></Article>
</div>
);
}
함수 부분을 깔끔하게 하기 위해서 arrow function으로 바꿔주었다. 기능은 똑같다.
2. Nav 클릭 시 해당 id 띄우기
function Nav(props) {
const lis = []
for(let i = 0; i<props.topics.length; i++) {
let t = props.topics[i];
lis.push(<li key={t.id}>
<a id={t.id} href={'/read/'+ t.id} onClick={(event)=>{
event.preventDefault();
props.onChangeMode(event.target.id);
}}>{t.title}</a>
</li>)
}
return <nav>
<ol>
{lis}
</ol>
</nav>
}
function App() {
const topics = [
{id:1, title:'html', body:'html os ...'},
{id:2, title:'css', body:'css os ...'},
{id:3, title:'js', body:'js os ...'},
]
return (
<div>
<Header title="WEB" onChangeMode={()=>{
alert('Header');
}}></Header>
<Nav topics={topics} onChangeMode={(id)=>{
alert(id);
}}></Nav>
<Article title="Welcome" body="Hello, WEB"></Article>
</div>
);
}
Header와 마찬가지로 onChangeMode라는 prop에 함수를 전달하는데 함수의 파라미터로 id값을 넘겨주고 id값이 경고창으로 뜨게 하고 싶다.
Nav 태그에서 a태그를 클릭했을 때 리로드가 일어나지 않게 하고 경고창이 뜨게 한다.
그렇게 하기 위해서 event.preventDefault() 를 해준다.
함수 안에서 a태그의 id 값을 얻기 위해서 event.target.id를 해준다.
event.target은 이벤트를 일으킨 태그를 지정해준다.
3. 정리
태그를 클릭했을 때 동작을 발생 시키는 방법 = props로 함수를 만들어서 태그로 넘겨주기
props로 넘긴 함수 호출 방법 = props.함수이름();
태그의 기본적인 동작을 막는 방법 = event.preventDefault();
태그의 요소를 가져오는 방법 = event.target.id
'개발공부 > 리액트' 카테고리의 다른 글
7. Create (0) | 2022.07.29 |
---|---|
6. state (0) | 2022.07.28 |
4. props (0) | 2022.07.27 |
3. 컴포넌트 만들기 (0) | 2022.07.26 |
2. 소스 코드 수정하기 (0) | 2022.07.26 |