【问题标题】:How to manage redux state object?如何管理 redux 状态对象?
【发布时间】:2017-11-07 07:52:53
【问题描述】:

这是响应数据。使用按增量和减量时,我需要存储每个项目的数量。

{name: "McChicken", type: "Non-Veg", price: 275, tax: 10}
{name: "Pizza", type: "Non-Veg", price: 275, tax: 10}
{name: "Burger", type: "Non-Veg", price: 275, tax: 10}

Redux 状态:在基于对象的存储中保存状态

所以它很容易根据密钥进行更新。

import * as types from '../actions/types';

var _ = require('lodash');

const INITIAL_STATE = {
  data: {},
  loading: false,
  error: '',
  cartData: {},
}; 

export default (state=INITIAL_STATE, action) => {
  switch (action.type) {

    case types.MENULIST_REQUEST_START:
        return { ...state, loading:true, error: '' };

    case types.MENULIST_SUCCESS:
      const newItems = _.mapKeys(array, 'name')
        return { ...state, data: newItems , loading:false, error: 'Success' };

    case types.UPDATE_ITEM: 
       return { ...state, [cartData.name]: action.payload  }

    case types.DELETE_ITEM:
      return _.omit(state, [cartData.name]: action.payload)

    case types.MENULIST_FAILED:
        return { ...state, data: {}, loading:false, error: 'Request failed' };

    default:
        return state;
  }
}

当我调用更新和删除项目操作时出现错误。

错误:cartData 未定义

如果响应得到更新,我如何更新数量和管理状态?

【问题讨论】:

  • 您正在进行计算成员访问。因此,将您的 cartData.name 包装在方括号中,如下所示:[cartData.name]
  • @darthaditya 试过了。但是得到 ReferenceError: cartData is not defined
  • 你能从你的reducer中粘贴整个代码吗?
  • @darthaditya 更新帖子。请检查
  • 即使你已经传播了状态对象,你仍然需要访问状态对象inside的cartData。所以正确的访问方法是[state.cartData.name]。 Spread 不会改变对象。

标签: javascript react-native redux react-redux state


【解决方案1】:

你需要改变

{ ...state, cartData.name: action.payload  }

es6 计算属性键

{ ...state, [cartData.name]: action.payload  }

Computed property keys

【讨论】:

  • 试过了。但是得到ReferenceError: cartData is not defined
  • 您是否使用您的 INITIAL_STATE 对象初始化了状态?
  • 是的。我能够获取 fetchData 的数据。
  • cartData 对象在 state { ...state, [state.cartData.name]: action.payload } 里面 :)
  • @GoorLavi [state.cartData.name] 未定义。现在状态有undefined: {....}。 cartData 仍处于初始状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 2019-09-12
  • 2016-02-28
  • 2020-05-13
  • 1970-01-01
  • 2021-03-20
  • 2019-11-14
相关资源
最近更新 更多