FrontEnd/React.js
setState() 함수 사용하기
J._.cobb
2022. 6. 27. 15:36
setState() 함수 사용하기
this.state.변수명=value와 같이 state를 직접 변경하면 render() 함수를 호출하지 않으므로 화면에 보이는 state 값은 바뀌기 전 상태로 남게 된다. setState() 함수로 state를 변경해야 render() 함수를 호출해 변경된 값을 화면에 보여줄 수 있다.
예제코드
App.js
import React from 'react';
import './App.css';
import SetState from './R025_SetState.js';
function App() {
return (
<div>
<h1>Start React 200!</h1>
<p>css 적용하기</p>
<SetState/>
</div>
);
}
export default App;
R025_SetState.js
import React, {Component} from "react";
class R025_SetState extends Component {
constructor(props) {
super(props);
this.state = {
StateString: 'react',
}
}
StateChange = (flag) => {
if(flag === 'direct') this.state.StateString = '리액트';
if(flag === 'setstate') this.setState({StateString : '리액트'});
}
render() {
return(
<div style={{padding: "0px"}}>
<button onClick={(e)=>this.StateChange('direct',e)}>
state 직접 변경</button>
<button onClick={(e)=>this.StateChange('setstate',e)}>
setState로 변경</button><br/>
[state 변경하기] StateString : {this.state.StateString}
</div>
)
}
}
export default R025_SetState;
참고사항

- 직접 바꾸지말고 setState를 사용하자
코드해설
Line7
- state 변수 StateString의 초기값으로 react라는 문자열을 저장했다. constructor() 함수가 실행되고 redner() 함수에서 화면을 긔기 때문에 {this.state.StateString}은 react로 표시된다.
Line 19~20
- [state 직접변경] 버튼을 눌렀을 때, this.state.변수명=value 문법으로 state를 직접 변경한다. 이때 StateString 값은 ‘리액트’로 변경되지만 render() 함수를 호출하지 않으므로 화면에는 이전 값인 ‘react’로 표시된다.
Line 21~22
- [setState로 변경] 버튼을 눌렀을 때 setState() 함수로 state를 변경한다. 이때 StateString 값은 ‘리액트’로 변경되고 render() 함수를 다시 호출해 화면에는 변경된 값인 ‘리액트’가 표시된다.
결과화면

