Redux:对状态进行调节动作

Sim*_*n H 5 reactjs redux

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

作为一个例子,我有一个组件列出了项目集的标题.该数据存储在state.matches.单击某个项目应该会在我的Entries组件中显示详细视图.

目前,我有这个动作创建者,它下载条目并触发一个动作addEntry,使得entriesreducer将数据添加到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 }) );
  }
}
Run Code Online (Sandbox Code Playgroud)

目前它总是下载新数据,因为它无法检查缓存.

另一种方法是将idSHOW_THIS_NEXT操作传递给条目端,此时reducer可以检查它是否在缓存中,如果没有则下载它.但是减速器不允许触发动作,最终可能被禁止.

我该如何勾选这个圆圈.

Mic*_*ley 7

我假设你正在使用Redux Thunk来处理从thunk返回getEntryFromId?您返回的函数可以带getState参数:

export function getEntryFromId(id) {
  return function(dispatch, getState) {
    const currentState = getState();
    // do something with `currentState`,
    // only dispatch if necessary
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是出于任何原因的反模式吗?看起来很优雅 (4认同)