Redux:对状态进行调节动作

时间:2015-10-24 19:04:19

标签: reactjs redux

据我了解,动作创建者不了解状态,并且不允许减速器触发新动作。那么你如何基于状态来调整一个动作 - 是否需要在渲染函数中完成?

作为一个例子,我有一个组件列出了项目集的标题。此数据存储在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

如何对这个圆圈进行平方。

1 个答案:

答案 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
  }
}