react.js에서의 setState와 replaceState의 비교
React.js 라이브러리는 처음이고 튜토리얼을 몇 가지 살펴보던 중 다음과 같은 사실을 알게 되었습니다.
this.setStatethis.replaceState
지정된 설명은 매우 명확하지 않습니다(IMO).
setState is done to 'set' the state of a value, even if its already set
in the 'getInitialState' function.
유사하게,
The replaceState() method is for when you want to clear out the values
already in state, and add new ones.
에 이어 console.log를 해보니state지금은 둘 다 가지고 있다data그리고.test.
그런 다음 console.log를 실행해 보니state다시 둘 다 가지고 있다data그리고.test.
그렇다면, 이 둘의 차이는 정확히 무엇일까요?
와 함께setState현재 상태와 이전 상태가 병합됩니다.와 함께replaceState현재 상태를 삭제하고 사용자가 지정한 상태로만 대체합니다.보통setState는 어떤 이유로 키를 삭제할 필요가 없는 한 사용됩니다.단, 보통 키를 false/filse로 설정하는 것이 보다 명확한 방법입니다.
변경은 가능하지만 replaceState는 현재 전달된 개체를 상태로 사용합니다.replaceState(x)설정되면this.state === x이건 좀 가볍네요setState따라서 수천 개의 컴포넌트가 상태를 자주 설정할 경우 최적화로 사용할 수 있습니다.
나는 이 테스트 케이스로 이것을 주장했다.
현재 상태가 다음과 같은 경우{a: 1}, 그리고 당신이 전화를 합니다.this.setState({b: 2}); 상태가 적용되면 다음과 같이 됩니다.{a: 1, b: 2}전화하셨다면this.replaceState({b: 2})당신의 주(는){b: 2}.
사이드 노트:상태가 즉석에서 설정되는 것은 아니기 때문에, 하지 말아 주세요.this.setState({b: 1}); console.log(this.state)테스트 시.
예에 의한 정의:
// let's say that this.state is {foo: 42}
this.setState({bar: 117})
// this.state is now {foo: 42, bar: 117}
this.setState({foo: 43})
// this.state is now {foo: 43, bar: 117}
this.replaceState({baz: "hello"})
// this.state. is now {baz: "hello"}
다만, 다음의 문서를 참조해 주세요.
setState()는 this.state를 즉시 변환하지 않고 보류 상태의 천이를 만듭니다.이 메서드를 호출한 후 this.state에 액세스하면 기존 값이 반환될 수 있습니다.
에 대해서도 마찬가지입니다.replaceState()
의사들에 따르면replaceState는 권장되지 않을 수 있습니다.
이 메서드는 Resact를 확장하는 ES6 클래스 구성 요소에서는 사용할 수 없습니다.요소.향후 React 버전에서는 완전히 삭제될 수 있습니다.
부터replaceState이제 권장되지 않습니다.다음은 매우 간단한 회피책입니다.비록 당신이 이것을 필요로 하는 경우는 거의 없을 것이다.
상태를 삭제하려면:
for (const old_key of Object.keys(this.state))
this.setState({ [old_key]: undefined });
또는 여러 개의 콜을 하고 싶지 않은 경우setState
const new_state = {};
for (const old_key of Object.keys(this.state))
new_state[old_key] = undefined;
this.setState(new_state);
기본적으로 이 상태의 모든 이전 키가 반환됩니다.undefined은 매우 쉽게 수 if " statement트트 statement statement statement:
if (this.state.some_old_key) {
// work with key
} else {
// key is undefined (has been removed)
}
if ( ! this.state.some_old_key) {
// key is undefined (has been removed)
} else {
// work with key
}
JSX의 경우:
render() {
return <div>
{ this.state.some_old_key ? "The state remains" : "The state is gone" }
</div>
}
상태를 상태 오브젝트와 하여 "바꾸기"를 하면 .undefined 상태: 상태: 상태: state)로 합니다.
const new_state = {new_key1: "value1", new_key2: "value2"};
const state = this.state;
for (const old_key of Object.keys(state))
state[old_key] = undefined;
for (const new_key of Object.keys(new_state))
state[new_key] = new_state[new_key];
this.setState(state);
언급URL : https://stackoverflow.com/questions/23293626/setstate-vs-replacestate-in-react-js
'programing' 카테고리의 다른 글
| Spring Boot 1.4에서 잭슨을 커스터마이즈하는 방법 (0) | 2023.03.19 |
|---|---|
| 사용자 정의 도메인을 openstime wordpress 블로그에 매핑 (0) | 2023.03.19 |
| ng-disabled 행의 경우 (0) | 2023.03.19 |
| react typescript testing TypeError: MutationObserver는 컨스트럭터가 아닙니다. (0) | 2023.03.19 |
| jQuery autocomplete with callback ajax json을 사용하여 자동 완성 (0) | 2023.03.19 |