любой способ узнать последнее действие, которое было отправлено в Redux - PullRequest
0 голосов
/ 28 ноября 2018

Я работаю с приложением «реагировать с редуксом». Я работаю с библиотекой redux-undo и, когда возможности библиотеки расширяются, она прослушивает список действий и возвращается к предыдущему состоянию, когда происходит отмена.

Сценарий: у меня есть страница, где элемент списка будет создан / удален, и вызов API выполняется всякий раз, когда происходят эти действия.Пользователь может отменить как операции создания, так и удаления.

Я хотел бы знать, есть ли способ узнать последнее действие, которое было отправлено.

Например: если пользователь создает элемент списка и нажимает «Отменить», я хотел бы знать, что было создано последнее действие, которое было отправлено, чтобы я мог отменить создание (удалить элемент списка, выполнивВызов API).

Точно так же, если пользователь удалил элемент списка, я хотел бы знать, что последнее отправленное действие было удалено, чтобы я мог отменить удаление (создайте элемент списка снова, сделав вызов API,извлечение сведений из прошлого состояния и отправка сведений об удаленном элементе списка)

Пожалуйста, дайте мне знать, есть ли способ достичь этого?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Вы можете использовать store.subscribe, как указано здесь :

Самый простой способ - использовать редуктор, который запоминает только последнее действие:

function lastAction(state = null, action) {
  return action;
}

Затем вы можете использовать store.getState (). LastAction, предполагая, что вы сделали что-то вроде

import { combineReducers, createStore } from 'redux';

const rootReducer = combineReducers({
  someReducer,
  someOtherReducer,
  lastAction // <-- use it!
});

const store = createStore(rootReducer);

store.subscribe(() => {
  console.log(store.getState().lastAction);
});
0 голосов
/ 29 ноября 2018

Вам потребуется найти альтернативное место для хранения ваших последних действий, на которые не влияет redux-undo, но также глобальное, чтобы вы могли получить к ним доступ в любом месте.

Я рекомендую решение local storage.

В своем редукторе вы можете добавить инструкцию, чтобы установить, какое последнее действие было отправлено в хранилище браузера:

...
case CREATE: {
  localStorage.setItem("latestAction", "CREATE");
  return someNewState;
}
case DELETE: {
  localStorage.setItem("latestAction", "DELETE");
  return someNewState;
}
...

Затем, когда вы хотите получить это значение из любого места в коде:

localStorage.getItem("latestAction");
...