При обновлении следующего приложения js используйте эффект не отправлять действие redux saga и обновлять состояние

#reactjs #redux #axios #next.js #redux-saga

#реагирует на #возвращение #аксиос #next.js #переделка-сага

Вопрос:

Мой вопрос в том, что при обновлении/перезагрузке следующего приложения js состояние хранилища redux не обновляется. У меня есть приведенный ниже код внутри компонента

 const Landing = () =gt; {  const freeADS = useSelector((state) =gt; state.ads.freeAds); //this states are working fine without page refresh  useEffect(() =gt; {  dispatch(fetchFreeAds());  }, [])   return(  {freeADS.map((data, i) =gt; {  //some codings.........  })}  ) } export default Landing;  

повторный призыв к действию

 export const fetchFreeAds = () =gt; {  return {  type: ActionTypes.FETCH_FREE_ADS  } }  

после того, как сага rootsaga / watch получит запрос, я вызову обработчик, как показано ниже

 export function* handleFreeAds() {    const { response, error } = yield call(fetchFreeAds);   if (response)  {  yield put({type:"SET_FREE_ADS", payload: response.data[0]});  }  else{    } }  

фактический вызов api происходит здесь

 export function fetchFreeAds() {  return axios.get('http://xxxxxxxxxx')  .then(response =gt; ({ response }))  .catch(error =gt; ({ error })) }  

В данный момент я получаю эту ошибку. пожалуйста, окажите некоторую поддержку. Спасибо

введите описание изображения здесь

Комментарии:

1. Связанные данные не заполняются до тех пор, пока API не вернется. Вы могли бы придать срезу состояния начальное состояние. Напр. state = { ads: { freeAds: [] } }

2.@slideshowp2 вот как управляют состоянием export interface State{freeAds: null} export const adReducers = (state = {}, {type, payload}) =gt; { ...... }

Ответ №1:

Спасибо @slideshowp2

Проблема решена путем выполнения этой модификации майнера. Добавлены фриады:[ ] возврат в исходное состояние.

 export interface State{  freeAds: null } export const adReducers = (state = {freeAds:[]}, {type, payload}) =gt; {  switch(type)  case ActionTypes.SET_FREE_ADS:  return {   ...state,  freeAds: payload  };  }