【问题标题】:How does reducer works when state = initialState?当 state = initialState 时,reducer 是如何工作的?
【发布时间】:2018-04-21 07:27:33
【问题描述】:

来自在线课程的示例代码:

import * as PlayerActionTypes from '../actiontypes/player';

const initialState = [
      {
        name: 'Jim Hoskins',
        score: 31,
      },
      {
        name: 'Andrew Chalkley',
        score: 20,
      },
      {
        name: 'Alena Holligan',
        score: 50,
      },
    ];

export default function Player(state=initialState, action) {
  switch(action.type) {
    case 'PlayerActionTypes.ADD_PLAYER':
      return [
        ...state,
        {
          name: action.name,
          score: 0,
        }
      ];

      case PlayerActionTypes.REMOVE_PLAYER:
        return [
          ...state.slice(0, action.index),
          ...state.slice(action.index+1),
        ]
  }
}

由于初始状态是不可变的(始终相同),因此状态是相同的。所以,假设我先添加一个新玩家,现在总共有四个玩家。如果那时我想删除第四个玩家(数组中的索引为 3),但它是如何工作的?

case PlayerActionTypes.REMOVE_PLAYER:
            return [
              ...state.slice(0, action.index),
              ...state.slice(action.index+1),
            ]

“状态”中没有 index = 3(只有三个玩家)。

我不明白。请为我的困惑提供一些帮助。提前致谢。

【问题讨论】:

  • 为什么说状态中没有index=3? (假设您在删除之前添加了一个)
  • @deezg 因为从'state=initialState'(函数中的第一个参数),因为'initialState'总是一样的(最初只定义了三个玩家),'state'如何变化>这是我的困惑。我不明白这部分。
  • 好的,现在我知道混乱来自哪里了。检查我的回答是否有助于理解它。

标签: reactjs redux reducers


【解决方案1】:
export default function Player(state=initialState, action) {

无论何时调度操作,都会使用 2 个参数调用此函数:

  1. 状态(即当前应用状态)
  2. 动作

基于这 2 个,此函数返回新的应用程序状态(将在下次使用新操作调用此函数时用作参数)

现在,对于第一次运行,当应用程序状态仍为 null 时,参数 state 将设置为 initialState。对于每次下一次运行,由于 state 将不再为 null,因此您的 state 参数将是当前应用程序的任何状态。

检查 ES6 函数默认参数。

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 2016-01-29
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多