【问题标题】:How to pass more than one value within dispatch in redux如何在redux的调度中传递多个值
【发布时间】:2021-04-07 08:10:18
【问题描述】:

我在我的 react native 应用程序中使用 redux 在添加和删除时管理购物车项目,所以当我想将项目添加到购物车时,我使用以下内容:

const dispatch = useDispatch()
const addItemToCart = item => dispatch({ type: 'ADD_TO_CART', payload: item })

这是按下上述调度程序时触发的按钮:

  <TouchableOpacity onPress={() => { addItemToCart(itemData, total) }} >
              <Text style={{ ...FONTS.h5 }}>Add to cart</Text>
               <Icon
                     name="cart-outline"
                     size={25}
                     color={COLORS.black}
                      backgroundColor={COLORS.primary2}
    
                  />
        </TouchableOpacity> 

所以我在这里将itemData, total 传递给调度员,该调度员应该传递给购物车。 以下是减速器:

const initialState = []

const cartItemsReducer = (state = initialState, action) => {
    switch (action.type) {
        case 'ADD_TO_CART':
            return [...state, action.payload]
        case 'REMOVE_FROM_CART':
            return state.filter(cartItem => cartItem.id !== action.payload.id)
    }
    return state
}

export default cartItemsReducer

所以,我想要的是在购物车屏幕和购物车屏幕中接收两个传递的值,我执行以下操作来检查两个值是否都被接收:

  cartItems = useSelector(state => state)
    console.log("cart item: ", cartItems)

但只能得到itemData,而total没有通过。

我可以做些什么来使两个值都被传递?

【问题讨论】:

    标签: react-native redux react-redux


    【解决方案1】:

    您没有将第二个参数传递给调度程序,因为您的调度程序只接收一个参数

    const addItemToCart = item => dispatch({ type: 'ADD_TO_CART', payload: item })
    

    如果你想传递两个参数,那么只需将你的 fn 修改为

    const addItemToCart = (item, total) => dispatch({ type: 'ADD_TO_CART', payload: { item, total } })
    

    然后在你的减速器中,你将拥有action.payload,而不是action.payload.item, action.payload.total

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 2017-06-13
      相关资源
      最近更新 更多