私はしばらくの間、useSelector と useDispatch で React Hook を使用してきました。ほとんどの場合、非常にうまく機能しますが、最近、非常に有線のシナリオを経験しました。例えば
// parentComponent
const MyComponent = (props) => {
const hasChanged = useSelector(state => {
const isChanged = checkIfChanged(state);
console.log('useSelector isChanged:>> ', isChanged);
return isChanged;
});
const selectChange = async(userId, userCode)=> {
console.log('selectChange hasChanged :>> ', hasChanged);
// ...
}
return (
<div>
<ChildComponent onSelectChange={selectChange} />
</div>
);
}
私は自分のプロパティを状態に保存しており、コンポーネントで何かが変更されるたびに、私のhasChanged
fromはtrueuseSelector
になりますが、変更を加えると、すでにtrueになっていることがわかりますが、関数内ではまだfalseです!hasChanged
useSelector
selectChange
console log
useSelector isChanged:>> true
useSelector isChanged:>> true
selectChange hasChanged :>> false // why it's false here as already true from useSelector
useSelector isChanged:>> true
誰も同じ経験をしていますか?私selectChanged
が async-await であるため、内部の値が最新の状態からフェッチされないのではないかと思っていますか?