Redux 允许还原程序访问状态

Redux 允许还原程序访问状态,redux,Redux,我有一个reducer,它维护某种列表中当前可见的项,并有一个用于显示下一个和上一个项的案例: export function currentIndex(state = null, action) { switch (action.type) { case types.INCREMENT: return state + 1 case types.DECREMENT: return state - 1; } } 我还有一个random状态,该

我有一个reducer,它维护某种列表中当前可见的项,并有一个用于显示下一个和上一个项的案例:

export function currentIndex(state = null, action) {
  switch (action.type) {
    case types.INCREMENT:
       return state + 1
    case types.DECREMENT:
        return state - 1;
  }
}
我还有一个
random
状态,该状态最初为false,但当设置为true时,我希望
currentListItem
减速机能够对此进行解释,并输出一个随机数


在redux中,哪种方法最惯用?

惯用的解决方案是使用中间件包(或类似软件包)将reducer逻辑转换为thunk

这允许您将特殊类型的
操作
视为函数,这意味着您可以使用特定的操作相关逻辑扩展普通操作。您给出的需要访问状态以有条件地确定操作逻辑的示例是redux thunk的一个很好的用例

下面是一个示例,说明了如何将逻辑从减速机中拉出来,然后发出砰的一声。您应该注意,与reducer不同,thunk显式支持通过
getState
dispatch
函数获取状态和分派后续操作

Thunk示例

export const increment= () => {
  return (dispatch, getState) => {
    const state = getState()
    const delta = (state.random) ? getRandomNumber() : 1
    dispatch({
      type: INCREMENT,
      delta
    })
  }
}

export function currentIndex(state = null, action) {
  switch (action.type) {
    case types.INCREMENT:
       return state + action.delta
  }
}

惯用的解决方案是使用中间件包(如(或类似)将reducer逻辑转换为thunk

这允许您将特殊类型的
操作
视为函数,这意味着您可以使用特定的操作相关逻辑扩展普通操作。您给出的需要访问状态以有条件地确定操作逻辑的示例是redux thunk的一个很好的用例

下面是一个示例,说明了如何将逻辑从减速机中拉出来,然后发出砰的一声。您应该注意,与reducer不同,thunk显式支持通过
getState
dispatch
函数获取状态和分派后续操作

Thunk示例

export const increment= () => {
  return (dispatch, getState) => {
    const state = getState()
    const delta = (state.random) ? getRandomNumber() : 1
    dispatch({
      type: INCREMENT,
      delta
    })
  }
}

export function currentIndex(state = null, action) {
  switch (action.type) {
    case types.INCREMENT:
       return state + action.delta
  }
}

呵呵?这不是教程代码。如果是的话,为什么会无关紧要呢??单个reducer不是一个选项,因为next和previous是通过next和previoushtml按钮调度的,random是一个可切换的按钮。因此,当切换到“下一步”时,按“下一步”将生成一个随机项。它看起来像一个教程代码(每个人都在他们的教程redux应用程序中递增数字)。“显示下一个和上一个项目”-预计会看到相应命名的操作,如
next
PREV
或其他操作。否则,道歉:-)“单个减速器不是一个选项”-为什么?发出事件/发送动作的内容并不重要。存储结构实际上不应该依赖于您的UI。因为“下一步”按钮将分派增量操作。按下random可调度一个动作,该动作将“random”状态设置为true。用户仍然可以单击“下一步”和“上一步”。如果random是真的,那么我需要能够改变prev和next的行为。嗯?这不是教程代码。如果是的话,为什么会无关紧要呢??单个reducer不是一个选项,因为next和previous是通过next和previoushtml按钮调度的,random是一个可切换的按钮。因此,当切换到“下一步”时,按“下一步”将生成一个随机项。它看起来像一个教程代码(每个人都在他们的教程redux应用程序中递增数字)。“显示下一个和上一个项目”-预计会看到相应命名的操作,如
next
PREV
或其他操作。否则,道歉:-)“单个减速器不是一个选项”-为什么?发出事件/发送动作的内容并不重要。存储结构实际上不应该依赖于您的UI。因为“下一步”按钮将分派增量操作。按下random可调度一个动作,该动作将“random”状态设置为true。用户仍然可以单击“下一步”和“上一步”。如果random是真的,那么我需要能够改变prev和next的行为。谢谢你的回答。我已经在使用thunks,并考虑过这是一个解决方案,但不确定这是一个方向。我同意这个。谢谢你的时间:)很高兴能帮上忙。你能把答案标为被接受吗?如果你觉得很慷慨,就投赞成票。谢谢你的回答。我已经在使用thunks,并考虑过这是一个解决方案,但不确定这是一个方向。我同意这个。谢谢你的时间:)很高兴能帮上忙。你能把答案标为被接受吗?如果你觉得很慷慨,就投赞成票。助教。