본문 바로가기
개발/React

React 4. props 와 event

by 상달군 2023. 4. 23.
728x90

prop와 event를 함께 보시죠 

- 컴포넌트에 속성값을 넣을수 있는 props에 대해 공부

- 이벤트는 말그대로 이벤트가 발생 되었을때 어떤한 역할을 해주는것 입니다. 


 

1. React 3.에서 마지막에 완성 했던 소스

import logo from './logo.svg';
import './App.css';

//사용자 정의 테그 만들기 (컴포넌트)
function Header(){
    return <header>
        <h1><a href="/">WEB</a></h1>
    </header>
}

function Nav(){
    return<nav>
        <ol>
            <li><a href="/read/1">html</a></li>
            <li><a href="/read/2">css</a></li>
            <li><a href="/read/3">js</a></li>
        </ol>
    </nav>
}

function Article(){
    return <article>
        <h2>웰컴 ~~</h2>
        Hello, Web
    </article>
}


function App() {
  return (
    <div>
        <Header></Header>
        <Nav></Nav>
        <Article></Article>

    </div>
    
  );
}

export default App;

2. props를 사용 해보겠습니다.

import logo from './logo.svg';
import './App.css';

//사용자 정의 테그 만들기 (컴포넌트)
function Header(props){
    return <header>
        <h1><a href="/">{props.title}</a></h1>
    </header>
}


/*... 생략 */


function App() {
  return (
    <div>
    // 이 코드줄에서 title에 주는값을 위쪽 {props.title}의 값에 넣어 주게 됩니다. 
        <Header title = 'React'></Header>
        <Nav></Nav>
        <Article></Article>

    </div>
    
  );
}

export default App;

이렇게 해더의 값이 바뀌는것을 확인 할 수 있습니다.

나머지 Nav와 Article 쪽도 바꿔 보겠습니다. 

import logo from './logo.svg';
import './App.css';

//사용자 정의 테그 만들기 (컴포넌트)
function Header(){
    return <header>
        <h1><a href="/">WEB</a></h1>
    </header>
}

function Nav(props){
	const lis =[]
    for(let i=0; i<props.topics.length; i++){
    	let t = props.topics[i];
        // 여기서 li태그 부분에 key은 고유해야한다 !!
        lis.push(<li key={t.id}><a href={'/read/'}+ t.id> {t.title} </a></li>
    return<nav>
        <ol>
			{lis}
        </ol>
    </nav>
}

function Article(props){
  return <article>
      <h2>{props.title}</h2>
      {props.body}
  </article>
}



function App() {
	const topics = [
    	{id:1, title:'html', body:'html is ...'},
        {id:2, title:'css', body:'css is ...'},
        {id:3, title:'javascript', body:'javascript is ...'}
    ]
  return (
    <div>
        <Header title="WEB"></Header>
        <Nav topics = {topics}></Nav>
        <Article title="Welcome" body="Hello,WEB"></Article>
    </div>
    
  );
}

export default App;

이제 위에 내용과 함께 이벤트를 설명하겠습니다. 

 

1. 이벤트 

function Header(props){
  return <header> 
      <h1><a href="/" onClick={(event) => {
        event.preventDefault();//리로드가 일어나지 않게 해주기 
        props.onChangeMode(); 
      }}>{props.title}</a></h1>
  </header>
}

/*... 생략*/


function App() {
  return (
    <div className="App">
      <Header title='WEB' onChangeMode = {()=> {
        alert('Header');
      }}></Header>
      <Nav></Nav>
      <Article title='Welcome' body='Hello, WEB'></Article>
    </div>
  );
}

이렇게

Header() 함수부분에는 onClick 부분을

<Header> 태그부분에는 onChangeMode 부분을 추가하면서 이벤트 기능을 부여하여 컨퍼넌트 사용자가 Header를 클릭했을때 해야할 작업을 정의 해주었습니다. 

( event.preventDefault();기본동작을 하지 못하게 한다. )

 

2. 이번에는 1. html , 2. css , 3. javascript 를 눌렀을때  alert를 이용하여 경고메세지를 뜨게하기

 

1. html     클릭시 메세지 창에 숫자 1

2. css    클릭시 메세지 창에 숫자 2

3. javascript  클릭시 메세지 창에 숫자 3

import logo from './logo.svg';
import './App.css';

function Header(props){
  return <header> 
      <h1><a href="/" onClick={(event) => {
        event.preventDefault();//리로드가 일어나지 않게 해주기 
        props.onChangeMode(); 
      }}>{props.title}</a></h1>
  </header>
}

function Nav(props){
  const lis =[]
  for (let i=0; i<props.topics.length; i++){
    let t = props.topics[i];
    lis.push(<li ket = {t.id}>
      <a id={t.id} href={'/read/'+t.id} onClick={event => {
        event.preventDefault(); //a태그를 클릭해도 아무변화가 없게 해주는코드
        props.onChangeMode(event.target.id);// event.target => 이벤트를 발생시킨 태그를 가르키게 된다. 
      }}>{t.title}</a>
    </li>)
  }
  return <nav>
    <ol>
      {lis} 
    </ol>
  </nav>
}

function Article(props){
  return <article>
      <h2>{props.title}</h2>
      {props.body}
  </article>
}

function App() {
  const topics = [
    {id:1, title:'html', body:'html is ....'},
    {id:2, title:'css', body:'css is ....'},
    {id:3, title:'JavaScript', body:'JavaScript is ....'}
  ]
  return (
    <div className="App">
      <Header title='WEB' onChangeMode = {()=> {
        alert('Header');
      }}></Header>
      <Nav topics={topics} onChangeMode = {(id)=>{
        alert(id);
      }}></Nav>
      <Article title='Welcome' body='Hello, WEB'></Article>
    </div>
  );
}

export default App;


경고메시지까지 다 잘 뜨게 되었네요~

저는 다음시간에는 state라는 개념과 예제를 해보겠습니다. 

728x90

'개발 > React' 카테고리의 다른 글

React 6. Create 구현하기!  (0) 2023.04.23
React 5. State  (0) 2023.04.23
React 3. 컴포넌트 만들기  (0) 2023.04.23
React 2. 소스 코드 수정 방법  (1) 2023.04.21
React 1. 내 노트북에 환경설정하기  (0) 2023.04.21

댓글