개발 블로깅/React 개념
[2019.04.15] React의 개념 - state
Hello이뇽
2019. 4. 15. 18:44
내가 이해한 대로 적는 설명
state는 해당 컴포넌트가 가지고 있는 상태, 즉 데이터를 말한다. 각 컴포넌트들은 자신의 데이터들을 가지고 있을 수 있다.
(함수형의 컴포넌트는 state를 가지지 않는다! 오로지 class 방식만!)
# state를 선언하는 법
class Hello2 extends React.Component{
constructor(props){
super(props);
this.state = {
//여기에 Object 방식으로 state를 저장
name : 'inyong',
age : 27
}
}
render = () => (
<div>Hello {this.props.todo}</div>
)
}
constructor 생성자에서 state변수를 만든다. 그리고 그 안에 object 방식으로 데이터를 추가해주면 된다.(맞는지는 모르곘는데, 꼭 state라는 명칭으로 선언해야되는 것 같다.)
# state를 변경하는 법
class Hello2 extends React.Component{
constructor(props){
super(props);
this.state = {
name : 'inyong',
age : 27
}
}
changeName = (NewName) => {
this.setState({
name : NewName
})
}
addAge = () => {
this.setState({
age : this.state.age + 1
})
}
render = () => (
<div>Hello {this.props.todo}</div>
)
}
클래스 안의 changeName, addAge 함수를 보자. this.setState라는 함수를 이용해서 데이터를 변경해준다. 원하는 state를 변경하고자 하면, 위 두 함수처럼 매개변수로 받고 this.setState함수를 이용하여 this.state를 바꿔주면 된다.
# onClick 설정하는 법
class Hello2 extends React.Component{
constructor(props){
super(props);
this.state = {
age : 27
}
}
addAge = () => {
this.setState({
age : this.state.age + 1
})
}
render = () => (
<div onClick={this.addAge}>Hello {this.props.todo}</div>
)
}
<div> 태그를 보자. Hello2 클래스으이 addAge함수를 그냥 onClick으로 넣어줬다. addAge를 arrow function으로 지정해줬기 때문이다.
arrow function이 아닌, 일반 function으로 선언해주면 실행시킬 함수를 bind해서 넘겨줘야한다.
class Hello2 extends React.Component{
constructor(props){
super(props);
this.state = {
age : 27
}
}
addAge() {
this.setState({
age : this.state.age + 1
})
}
render = () => (
<div onClick={this.addAge.bind(this)}>Hello {this.props.todo}</div>
)
}
반응형