Получить переменную состояния после завершения отправки в React Redux и Saga?

Здравствуйте, я новичок в React, Redux и Saga. Итак, у меня есть сценарий, в котором у меня есть файл .jsx, который представляет собой файл представления, затем файл действия, используемый для отправки, и я также использую saga, которая обновляет данные в редукторах. Ниже приведены структуры файлов:

  1. Файл действия:
export const getAction = (requestor) => ({
  type: GET_ACTION,
  data: {
    requestor,
  },
});
  1. Файл-редуктор
export const Reducer = (currentState = {}, action) => {
  const newState = { ...currentState };

  switch (action.type) {
    case GET_ACTION:
      newState.data = action.data;
      return newState;
  }  
};
  1. Файл саги
function* getData(action) {
  const { requestor } = action.data;
  try {
    const data = yield call(callService);
    if(success) {
      yield put( {type: GET_ACTION, data} );
    }
  } catch (e)
  {
  }
}

function* getDataSaga() {
  yield takeLatest(GET_ACTION, getData);
}

export {
  getData,
};

export default [
  getDataSaga,
];
  1. jsx файл
const [dummy, setDummy] = useState([]);
const data = useSelector(state => state.data, shallowEqual) || {};

There is a function in which dispatch function is called.

dispatch(getAction(requestor));

Теперь мне нужно получить доступ к обновленному состоянию данных после того, как диспетчер завершил обновление данных, потому что после обновления данных мне нужно установить Dummy, чтобы установить указанную фиктивную переменную. Любым способом, к которому я могу приблизиться, чтобы добиться этого. Я попытался использовать dispatch.then, но в пользовательском интерфейсе говорится, что .then не является функцией для отправки.


person Akshay    schedule 01.12.2020    source источник
comment
вы отправляете GET_ACTION, но не обрабатываете его в редукторе, поэтому это действие не вызывает изменения состояния   -  person bsapaka    schedule 01.12.2020
comment
на самом деле это было неправильно, дело было в GET_ACTION.   -  person Akshay    schedule 01.12.2020


Ответы (1)


после обновления данных я должен установить Dummy

useEffect позволяет вам что-то делать при изменении данной опоры

const [dummy, setDummy] = useState([]);
const data = useSelector(state => state.data, shallowEqual) || {};

// setDummy when `data` changes
useEffect(() => {
  setDummy(data);
}, [data])
person bsapaka    schedule 01.12.2020