Я загружаю данные из API publi c после монтирования моего компонента. Когда данные загружаются, я передаю их в редуктор, но он всегда срабатывает дважды. Вот что у меня есть:
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
, потому что в этом случае он добавляет два пустых объекта в массив вместо одного. Я не был в документации для побочных эффектов, но я был не в состоянии решить это.
Как лучше всего с этим справиться?