即使在此购物车示例中调用addToCartUnsafe之前,addToCart如何检查productId?

时间:2018-06-27 14:05:04

标签: redux redux-thunk

Link to example

在src / actions / index.js中,addToCart函数在分派addToCartUnsafe之前检查是否(getState()。products.byId [productId] .inventory> 0)。

代码:

export const addToCart = productId => (dispatch, getState) => {
  if (getState().products.byId[productId].inventory > 0) {
    dispatch(addToCartUnsafe(productId))
  }
}

在src / reducers / products.js中,[productId]是在调用byId的默认语句时定义的。该语句在定义[productId]之前检查action.productId是否存在,否则返回状态,这意味着只有addToCartUnsafe能够触发默认语句,因为它是唯一携带productId的操作。

代码:

const byId = (state = {}, action) => {
  switch (action.type) {
    case RECEIVE_PRODUCTS:
      return {
        ...state,
        ...action.products.reduce((obj, product) => {
          obj[product.id] = product
          return obj
        }, {})
      }
    default:
      const { productId } = action
      if (productId) {
        return {
          ...state,
          [productId]: products(state[productId], action)
        }
      }
      return state
  }
}

0 个答案:

没有答案