setStateが非同期アクションであることがわかっているので、componentWillReceiveProps
がトリガーされる前に状態値が更新されていることを確認するために同期呼び出しを行いました。このコードは私の子要素に書かれています。私は親要素で何かすることがあるのだろうか?それとも他の理由があるのだろう?私はあなたのsetState
呼び出しで誤った;
を前提とした場合、以下の問題のタイプミスであり、実際のコードではないが、問題はここにある私のコードsetStateが反応した後に状態値が変更されない
constructor(props) {
super(props);
this.state = {
loading: false,
yearValue:Number(localStorage.getItem('year'))//this is 2019
};
}
componentDidMount() {
}
componentWillReceiveProps(nextProps) {
console.log(
'before if condition...',
nextProps,
Number(localStorage.getItem('year'))
);
if (
this.state.yearValue ===
Number(localStorage.getItem('year')) //this condition satisfied twice before it changed the value
) {
console.log('inside if condition.....', nextProps);
this.setSstate = {
loading: false
};
} else this.setState({ loading: false });
}
updatePrograValues = year => {//year = 2017
if (year === Number(localStorage.getItem('year'))) {
this.props.showPlanYearValues(year);
} else {
this.setState({
loading: true
},this.props.tooltipRefresher());
}
};
申し訳ありませんが、あなたはより多くのことを詳しく説明してくださいすることができます。私は 'tooltipRefresher'から戻ってきたものがすべて州に戻ると言っていましたか? – LowCool
setStateに関数を渡す必要があります。この関数は、状態が更新され、コンポーネントが再レンダリングされた後に呼び出されます。現在、実際に呼び出すので、関数tooltipRefresherから返される値を渡しています。カッコを削除した場合は、実際の関数を渡すことになり、問題は解決されます。 – dostu
oohh..Bindをいつ使うべきかを真剣に調べる必要があります。 – LowCool