Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 리액트
- 타입스크립트
- 2022
- 제네릭
- javascript
- NonNullable
- 폰트적용하기
- react
- click and drag
- 성능최적화
- Chart.js
- 티스토리꾸미기
- JS console
- React Native
- typescript
- 레이아웃쪼개기
- vue.js
- utilty type
- 반복줄이기
- CSS
- reactjs
- returnType
- TSDoc
- 공통컴포넌트
- 개발콘텐츠
- React.js
- 타입좁히기
- 누구나 자료구조와 알고리즘
- 커스텀
- const 단언문
Archives
- Today
- Total
몽땅뚝딱 개발자
[React] 클래스형 컴포넌트 - state / state 값 변경하기 / setState() / forceUpdate() 본문
Development/React.js · Next.js
[React] 클래스형 컴포넌트 - state / state 값 변경하기 / setState() / forceUpdate()
레오나르도 다빈츠 2022. 8. 22. 22:52
◽ state 사용하기
import React from "react";
import './App.css';
import ChildComp from './ChildComp'
function App() {
return (
<div>
<h1>React</h1>
<ChildComp
val_string={'After LIKE'}
/>
</div>
);
}
export default App;
import React, { Component } from "react";
class ChildComp extends Component {
constructor(props) {
super(props);
this.state = {
stateString: this.props.val_string,
stateNumber: 200
}
}
render() {
return (
<div style={{ padding: '20px' }}>
{this.state.stateString}
</div>
);
}
}
export default ChildComp
◽ setState()를 사용하여 값 변경하기
[this.state.변수명 = value] 같이 state를 직적 변경하면 render() 함수가 호출되지않아 값이 변경되지 않는다.
state 값을 변경할 때는 setState()를 사용한다.
import React from "react";
import './App.css';
import ChildComp from './ChildComp'
function App() {
return (
<div>
<h1>React</h1>
<ChildComp />
</div>
);
}
export default App;
import React, { Component } from "react";
class ChildComp extends Component {
constructor(props) {
super(props);
this.state = {
stateString: 'After LIKE',
}
}
stateChange = () => {
this.setState({ stateString: 'Before LIKE' })
}
render() {
return (
<div style={{ padding: '20px' }}>
<button onClick={this.stateChange}></button>
{this.state.stateString}
</div>
);
}
}
export default ChildComp
◽ forceUpdate()를 사용하여 값 변경하기
this.state.stateString = 'Before LIKE'는 render() 함수를 호출하지 않기 때문에 값을 변경하지 않는다.
이 때 forceUpdate() 함수로 화면을 강제로 새로고침하면 render() 함수를 호출하여 변경된 값을 화면에서 확인할 수 있다.
import React, { Component } from "react";
class ChildComp extends Component {
constructor(props) {
super(props);
this.state = {
stateString: 'After LIKE',
}
}
stateChange = () => {
this.state.stateString = 'Before LIKE'
this.forceUpdate()
}
render() {
return (
<div style={{ padding: '20px' }}>
<button onClick={this.stateChange}></button>
{this.state.stateString}
</div>
);
}
}
export default ChildComp
◽ object값 변경하기
function modifyTitle() {
// 원본 오브젝트를 유지하는 것이 좋다.
let copy = [...title] // deep copy 사용
copy[0] = '변경할 텍스트'
setTitle(copy)
}
출처
이정열, 초보자를 위한 리액트 200제 (정보문화사, 2021)
'Development > React.js · Next.js' 카테고리의 다른 글
[React] 함수형 컴포넌트 (0) | 2022.08.28 |
---|---|
[React] 클래스형 컴포넌트 - Component, PureComponent / shallow-equal (0) | 2022.08.28 |
[React] 클래스형 컴포넌트 - Props / 자료형 선언 / 필수값과 기본값 지정 (0) | 2022.08.20 |
[React] 기본개념 (0) | 2022.05.22 |
[React] State를 올바르게 사용하는 방법 (0) | 2022.05.20 |
Comments