【问题标题】:Update the state of object in reducer在 reducer 中更新对象的状态
【发布时间】:2018-10-30 05:22:40
【问题描述】:

我是反应js的新手。在这里,我确实有一个功能,可以添加或删除三个差异行。我有一个减速器,就像,

const initialState = {
    Low: [
        {
            id: 'L0',
            technologyId: 0,
            technology: '',
            type: '',
            count: '',
            level: 'EASY'
        }
    ],
    Medium: [
        {
            id: 'M0',
            technologyId: 0,
            technology: '',
            type: '',
            count: '',
            level: 'Medium'
        }
    ],
    High: [
        {
            id: 'H0',
            technologyId: 0,
            technology: '',
            type: '',
            count: '',
            level: 'Tough'
        }
    ],

所以,在这里,我想把它作为一个通用的,所以,我试图在点击加号时添加对象并在 - 上删除。所以,

在这里,我正在添加使用,

const tempObj = {
      id: tempvar + id,
      technologyId: 0,
      technology: temp[0].technology,
      type: type,
      count: '',
      level: addtype
    }

我现在创建这个对象取决于我将它添加到那个特定数组中的 addType。

我就是用这种方式做的,

const addData = [...this.props.lowData[addtype], tempObj];

    this.props.addNewTech(addData);

所以,这里...this.props.lowData[addtype] 返回一个对象而不是数组,这是问题所在吗?如果是,它应该返回一个数组而不是对象,但是这如何返回对象而不是数组。 我的 props.lowData 就像,

一个具有三个不同数组的对象,我的意思是与reducer的相同。但是每次我添加它时,它只会在Low数组中添加该元素,而不是在medium或high中。谁能帮我解决这个问题?

【问题讨论】:

  • this.props.lowData 是什么样的。可以发一下截图吗?
  • 我可以发帖。
  • @Shivam 添加了低数据请检查
  • 您到底想达到什么目的?同时显示相应的动作和reducer代码。
  • 实际上,在单击添加按钮时,我只想将一个元素添加到相应的数组中,例如,如果我在 Low 中添加一个元素,那么它应该添加到 Low 数组中,其他数组也是如此。但现在,它每次都会被添加到低位。

标签: javascript reactjs redux react-redux


【解决方案1】:

问题出在你只更新Low 属性的reducer 中。您需要检查哪些属性需要更新。为此,您可以像这样将addtype 传递给您的动作创建者

this.props.addNewTech({ addData, addtype });

然后在行动创建者

export function addNewTech(data) { 
  return {
     type: ADD_NEW, 
     data //is equavalent to data: data (ES6)
  } 
} 

然后在reducer中动态更新对象

    case ADD_NEW: 
      return { 
        ...state, 
        //here choose the property to be updated dynamically
        //replace Low: action.data with below line
        [action.data.addtype]: action.data.addData, 
        error: false, 
      } 

**注意这里[action.data.addtype]: action.data.addData 我们在 ES6 中使用计算属性名称。

【讨论】:

  • 优秀答案 shivam 。非常感谢您的宝贵时间:-)
猜你喜欢
  • 1970-01-01
  • 2023-01-28
  • 2019-05-07
  • 1970-01-01
  • 2019-07-28
  • 2020-05-23
  • 2020-10-12
  • 2018-08-04
  • 1970-01-01
相关资源
最近更新 更多