【发布时间】:2019-11-23 10:41:03
【问题描述】:
我有一个带有两个状态变量(itemsData 和itemsCollections)的 React 功能组件。变量在useEffect 方法中更新。但是在useEffect 发生之后,状态变量之一是null。
在切换 setStateFunctions (setItemsData & setItemsCollect) 调用顺序时,两个参数都按预期初始化。
怎么样?
const MyComponent = ({itemsIds}) => {
const [itemsData, setItemsData] = useState([]);
const [itemsCollections, setItemsCollect] = useState({});
useEffect(() => {
fetchItemsData({ itemsIds }).then(({ items, itemCollect }) => {
setItemsData(items);
setItemsCollect(itemCollect);
})
}, [itemsIds]);
...
console.log('itemsData', itemsData) // the expected array
console.log('itemCollect', itemCollect) // empty objecy
useEffect后的状态:itemCollect = {}, itemsData = [{value:...},...]
切换调用顺序:
const MyComponent = ({itemsIds}) => {
...
useEffect(() => {
fetchItemsData({ itemsIds }).then(({ items, itemCollect }) => {
setItemsCollect(itemCollect); // <--> switched rows
setItemsData(items); // <--> switched rows
})
}, [itemsIds]);
...
console.log('itemsData', itemsData) // the expected array
console.log('itemCollect', itemCollect) // the expected object
useEffect 后的状态:itemCollect = { someValue: ...} , itemsData = [{value:...},...]
【问题讨论】:
-
尝试在 useEffect 内部但在 fetchItemsData 外部记录到控制台。据我所知,顺序无关紧要
标签: javascript reactjs react-hooks