초보 개발자

3-3 event, bind 본문

React

3-3 event, bind

taehyeki 2021. 9. 3. 19:46

  <Nav

          data={this.state.content}

          onPageChange={function (id) {

            this.setState({

              mode: "read",

              selected_id: Number(id),

            });

          }.bind(this)}

        ></Nav>

 

class Nav extends Component {

  render() {

    const data = this.props.data;

    let list = [];

    for (var i = 0; i < data.length; i++{

      list.push(

        <li key={data[i].id}>

          <a

            href={"/content/" + data[i].id}

            onClick={function (id, e) {

              e.preventDefault();

              this.props.onPageChange(id);

            }.bind(this, data[i].id)}

          >

            {data[i].desc}

          </a>

        </li>

      );

    }

    return <ul>{list}</ul>;

  }

 

 

App의 render안의 코드

 let _title, 

      _desc = null;

    if (this.state.mode === "welcome") {

      _title = this.state.welcome.title;

      _desc = this.state.welcome.desc;

    } else if (this.state.mode === "read") {

      _title = this.state.content[this.state.selected_id].title;

      _desc = this.state.content[this.state.selected_id].desc;

    }

 

먼저 Nav에 있는 li를 만들 때 클릭을하면 onPageChange함수가 발동하도록 하고 bind를 통해서 그것을 사용할 수 있도록 한다. 또한 bind 뒤에 값을 넣으면 함수에서 변수로 사용할 수 있기에 게시물의 번호를 id에 지정하여 onPageChange에 매개변수로 넣어주어 selected_id가 바뀌도록 하였다. select_id가 바뀐다면 랜더링을 다시하기때문에

      _title = this.state.content[this.state.selected_id].title;

      _desc = this.state.content[this.state.selected_id].desc; 이렇게 되어

우리가 선택한 게시물의 내용이 

 <Content title={_titledesc={_desc}></Content>

나오게 된다.

'React' 카테고리의 다른 글

5 CRUD Update  (0) 2021.09.05
4 CRUD - C , shouldComponentUpdate  (0) 2021.09.05
3-2 event, bind  (0) 2021.09.03
3-1. state props  (0) 2021.09.03
2. props, components  (0) 2021.09.03