安装组件后,我正在从公共 API 加载数据。加载数据时,我将其传递给减速器,但它总是触发两次。这就是我所拥有的:
function MyComponent(props) {
function reducer(data, action) {
switch (action.type) {
case 'INITIALIZE':
return action.payload;
case 'ADD_NEW':
const newData = {...data};
newData.info.push({});
return newData;
}
}
const [data, dispatch] = React.useReducer(reducer, null);
useEffect(() => {
fetch(URL)
.then(response => {
dispatch({
type: 'INITIALIZE',
payload: response
});
})
.catch(error => {
console.log(error);
});
}, []);
const addNew = () => {
dispatch({ type: 'ADD_NEW' });
}
return(
<>data ? data.info.length : 'No Data Yet'</>
);
}
如您所见,该组件等待数据填充减速器,该减速器何时INITIALIZE
也被调用两次,但在需要调用之前我并不关心它ADD_NEW
,因为在这种情况下,它会将两个空白对象添加到数组中只有一个。我没有进入有关副作用的文档,但我无法解决它。
处理这个问题的最佳方法是什么?