每次使用redux在反应中分派动作时,状态都会初始化为初始状态吗?

问题描述 投票:0回答:1

例如在下面的代码中(注意:此代码中没有什么特别的,仅作为示例):

 const INITIAL_STATE = {
  hidden: true,
  cartItems: []
};

const cartReducer = (state = INITIAL_STATE, action) => {
  switch (action.type) {
    case CartActionTypes.TOGGLE_CART_HIDDEN:
      return {
        ...state,
        hidden: !state.hidden
      };
    case CartActionTypes.ADD_ITEM:
      return {
        ...state,
        cartItems: addItemToCart(state.cartItems, action.payload)
      };
    case CartActionTypes.REMOVE_ITEM:
      return {
        ...state,
        cartItems: removeItemFromCart(state.cartItems, action.payload)
      };
    case CartActionTypes.CLEAR_ITEM_FROM_CART:
      return {
        ...state,
        cartItems: state.cartItems.filter(
          cartItem => cartItem.id !== action.payload.id
        )
      };
    default:
      return state;
  }
};

Q1:状态是否恢复为INITIAL_STATE,即

{
  hidden: true,
  cartItems: []
};

每次将动作发送给该减速器吗?

Q2:所以Combinereducer中的状态也将重新初始化为初始状态,比如说Reducer中返回了默认状态?或换种说法:Q3:组合减速器中与特定减速器相对应的状态不断重新初始化/设置为由最近分派的动作定义的状态,例如在上面的代码中,如果CartActionTypes.ADD_ITEM是最近分发给减速器的动作

 case CartActionTypes.ADD_ITEM:
      return {
        ...state,
        cartItems: addItemToCart(state.cartItems, action.payload)
      };

然后,combinatereducer中的状态将是(基于上述情况:

{
  hidden: true,
  cartItems: addItemToCart(state.cartItems, action.payload)
};

和隐藏对象将被重新初始化为true,而不管由于早先执行的操作而使其状态值处于什么状态?因此,基本上,最近调度的动作决定了将更改哪个当前状态值,而与先前调度的动作无关,并且最新调度未改变的状态值被重新初始化为初始状态?

问:如果我的理解正确,那么在响应中调用状态值的各个组件(例如,使用mapStatetoProps)是否只能访问最新调度所定义的状态值?

reactjs redux state dispatch
1个回答
0
投票

[当您分派一个动作时,它将被发送到化简器以基于分派的CURRENT STATEACTION来计算下一个状态。

现在您的功能cartReducer接受2个参数,stateaction。您实际上是在告诉reducer函数,如果未提供状态,则使用INITIAL_STATE。因此,当执行reducer函数时,它将查看state的值是否为undefined。如果是这样,它将使用INITIAL_STATE,否则它将使用提供的状态值,即您的当前状态。

您可以在JavaScript here中查看有关默认参数的更多信息。您可以阅读redux的核心原则here

© www.soinside.com 2019 - 2024. All rights reserved.