我正在处理带有redux的应用程序,正在使用库redux-undo,随着库功能的发展,它会监听动作列表,并在撤消发生时恢复到以前的状态。
方案:我有一个页面,在该页面上将创建/删除列表项,并在发生这些操作时进行API调用。用户可以撤消创建和删除操作。
我想知道是否有任何方法可以知道已分派的最新动作。
例如:如果用户创建一个列表项并单击“撤消”,我想知道已分派的最新操作是创建的,因此我可以还原create(通过调用API删除列表项) 。
同样,如果用户删除了一个列表项,我想知道调度的最新操作是删除,这样我就可以还原删除(通过调用API并获取详细信息再次创建列表项从过去的状态并发送已删除列表项的详细信息)
请让我知道是否有任何方法可以实现这一目标?
答案 0 :(得分:0)
您需要找到一个备用存储空间来存储您的最新操作,该操作不受redux-undo
的影响,但也可以全局存储,以便您可以在任何需要的地方访问它。
我建议使用local storage
解决方案。
在您的化简器中,您可以添加一条语句来设置哪一个是最近在浏览器存储中调度的动作:
...
case CREATE: {
localStorage.setItem("latestAction", "CREATE");
return someNewState;
}
case DELETE: {
localStorage.setItem("latestAction", "DELETE");
return someNewState;
}
...
然后,当您想从代码中的任何地方获取该值时:
localStorage.getItem("latestAction");
答案 1 :(得分:0)
您可以使用here中的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);
});