일부 값을 로컬 저장소에 저장했습니다. 구성 요소가 탑재되면이 값을 상태로로드하려고합니다. 그러나 추가되는 마지막 속성 만 상태에 추가됩니다. 내 localStorage에서 값을 확인한 결과 모든 값이 있습니다. 또한, 조건 블록에 변수 (desc, pic 또는 foo)를 기록하면 그 변수가 있습니다.분산 연산자를 사용하여 setState를 여러 번 연속 사용하기
블록을 상태를 다시 쓰는 경우 처음에는 다음과 같은 생각을했지만 실제로 스프레드 연산자를 올바르게 사용하고 있기 때문에 그렇지 않습니다. 모든 기존 속성 다음에 새 속성을 추가합니다.
나는 블록이 처음으로 상태가 설정되기 전에 블록이 마지막으로 실행되고 있다는 문제가 있다고 생각합니다. 로컬 저장소의 세 속성을 모두 상태로 가져올 수 있도록 코드를 작성하려면 어떻게해야합니까?
componentDidMount() {
const desc = window.localStorage.getItem('desc');
const pic = window.localStorage.getItem('pic');
const foo = window.localStorage.getItem('foo');
if (desc) {
console.log(desc) //'some desc'
this.setState({
...this.state,
textArea: {
...this.state.textArea,
desc: desc,
},
},()=>console.log(this.state.textArea.desc)); //undefined
}
if (pic) {
console.log(pic) //'some pic'
this.setState({
...this.state,
textArea: {
...this.state.textArea,
pic: pic,
},
},()=>console.log(this.state.textArea.pic)); //undefined
}
if (foo) {
console.log(foo) //'some foo'
this.setState({
...this.state,
textArea: {
...this.state.textArea,
foo: foo,
},
},()=>console.log(this.state.textArea.foo)); //'some foo'
}
}
당신은'setState()'(비동기 함수)를 3 번 호출하기 때문에 매번 상태를 덮어 쓰게됩니다. 동일한 호출에서 3 가지 속성을 모두 설정해보십시오. – yberg
'setState'는 여러분이 명시 적으로 정의한 것을 덮어 쓰기 만하기 때문에'this.setState ({... this.state})에 그럴 필요가 없습니다. 여기에 em을 언급하지 않으면 state props를 제거하지 않습니다. – wostex