【问题标题】:Redux reducer adding _id to stateRedux reducer 将 _id 添加到 state
【发布时间】:2017-02-03 13:21:04
【问题描述】:

我有一个 React / Redux 应用程序,并且正在使用 redux-logger 来显示状态更改。我有一些奇怪的行为,结果状态包含 _id 属性。例如,以下信息显示了我的记录器输出:

上一个状态:

{
    title: ""
}

动作对象:

{
    title: "New title"
}

下一个状态:

{
    _id: ObjectID,
    title: "New title"
}

下面是我的reducer函数:

function updateState(state = initialState.obj, action) {
    switch (action.type) {
        case 'SET_TITLE':
            var newState = Object.assign({}, state, action.obj);
            return newState;
        default:
            return state;
    }
}

initialState 是:

{
    obj: {
        title: ""
    }
}

动作载荷是:

{
    type: 'SET_TITLE',
    obj: {
        title: "New Title"
    }
}

和dispatcher如下:

// Call to API to get data from MongoDB...
let dataObj = response.data;
let newObj = {
    title: dataObj.title
};
dispatch({
    type: 'SET_TITLE',
    obj: newObj
});

为什么要添加 _id 属性?

【问题讨论】:

  • 我认为这是无关紧要的,因为这是 redux-logger 推送到浏览器控制台的内容。
  • @JoeTidee 如果你有var newState = Object.assign({}, state, action.obj); 新状态将是浅拷贝,所以要在action.obj 中有_id,你需要有键_id。检查here
  • 不确定我是否理解...我不想要 _id 属性,但它在状态更改后出现。

标签: reactjs redux


【解决方案1】:

没什么好担心的。您的初始状态甚至可能是一个空对象。

{ }

当您的应用程序遍历状态时,每次都会调用 reducer 并创建新状态

new_state = reducer_function(current_state, action);

您的 Store 对象(状态)可能会获得不同的键。您必须尝试了解可能进入状态的内容,并得出关于_id 键的结论。 一般来说,Store 可能非常复杂和庞大。


在你上次更新后,我更好地理解了这个问题,你正在将 te 对象添加到状态。

var action = new Object;
action.title = "New Title";
var state = {
    title: "Title",
    desc: ""
}
console.log(state);

var newState = Object.assign({}, state, { title: action.title });
console.log(newState);

在您的情况下,“新标题”将是 action.title


这个 Object.assign() 对 ES6 来说是新的。

【讨论】:

  • reducer 只有一个功能,就是更新标题 - 我将编辑问题以显示 reducer。
  • @JoeTidee,我认为当 React 没有将对象作为 { key : value } 对时,它会自动添加 _id 作为键。
  • 道歉,我的编辑与原始问题有冲突,所以我更新了它以删除 desc 并显示 initialState。这样,就不需要以 { key : value } 的形式出现。 redux-logger 输出显示与初始状态合并的对象不包含任何 _id,所以想知道它来自哪里。
  • 有几个版本。
  • 我对 _id 没有任何想法,然后我在 redux-loger 项目中搜索了 _id 部分并看起来并没有通过字符串搜索找到它。还有一个 redux-loger 项目仅供您参考。
猜你喜欢
  • 2016-01-29
  • 2017-07-12
  • 2016-06-23
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 2018-03-31
相关资源
最近更新 更多