【问题标题】:React-Redux: State updated but not copiedReact-Redux:状态已更新但未复制
【发布时间】:2017-01-19 15:59:38
【问题描述】:

在我的 reducer 中,我无法理解为什么我的状态返回更新但未复制。

const loginReducer = (state = {}, action) => {

    let newstate = JSON.parse(JSON.stringify(state))
    const { type, payload } = action

    switch(type) {
        case constant.LOGIN_SUCCESS:
            //
            newstate = { login: [{ user: payload.user, password: payload.password, logged: true }] }
            console.log(newstate.login)
            break;
        default:
            break;
    }

    return newstate

}

当然,我错过了一件简单的事情,但我无法弄清楚

【问题讨论】:

  • 为什么你觉得你需要用JSON.parse(JSON.stringify(state))克隆?

标签: javascript reactjs redux state reducers


【解决方案1】:

看起来您在这一行中完全重新分配了newstate

newstate = { login: [{ user: payload.user, password: payload.password, logged: true }] }

如果您想保持state 中的当前值,您还需要包含它们:

newstate = { ...newstate, login: [{ user: payload.user, password: payload.password, logged: true }] }

上面使用了对象传播,你可能在你的 babel 配置中有也可能没有。您也可以使用Object.assign 来实现相同的目的:

newstate = Object.assign(newstate, { login: [{ user: payload.user, password: payload.password, logged: true }] });

【讨论】:

  • 嗨,Davin,我按照你的建议做了,但我收到了这个错误:aught Error: Cannot find module "./src/reducers/loginReducer"
  • 你的 babel 配置中是否有散布对象?我将编辑另一种方法来实现同样的目的。
  • 我已经安装了 babel-preset-stage-2 但目前我遇到了同样的问题
  • 我也尝试过使用 Object.assign,但无论如何它都不会复制我的状态,该死的我无法理解出了什么问题
猜你喜欢
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2019-08-31
  • 2021-01-08
相关资源
最近更新 更多