据我了解,动作创建者不了解状态,并且不允许减速器触发新动作。那么你如何基于状态来调整一个动作 - 是否需要在渲染函数中完成?
作为一个例子,我有一个组件列出了项目集的标题。此数据存储在state.matches
中。单击某个项目应在我的Entries
组件中显示详细视图。
目前,我有这个动作创建者,它会下载该条目并触发一个动作addEntry
,这会导致entries
减速器将数据添加到state.entries中的缓存中。
export function getEntryFromId(id) {
return function(dispatch) {
dispatch(lookupInit(id));
fetch('/register/id/' + id)
.then( res => res.json() )
.then( res => dispatch(addEntry(res[0])) ) // data returned as array of one element
.catch( err => dispatch({ type: ENTRY_LOOKUP_FAIL }) );
}
}
目前它总是下载新数据,因为它无法检查缓存。
另一种方法是将id
作为SHOW_THIS_NEXT操作传递给条目端,此时reducer可以检查它是否在缓存中,如果没有则下载它。但是减速器不允许触发动作,最终可能是forbidden。
如何对这个圆圈进行平方。
答案 0 :(得分:7)
我假设您正在使用Redux Thunk处理来自getEntryFromId
的thunk?您返回的函数可以采用getState
参数:
export function getEntryFromId(id) {
return function(dispatch, getState) {
const currentState = getState();
// do something with `currentState`,
// only dispatch if necessary
}
}