JavaScript:a = Object.assign({}, a, {k: v}) 会改变 a 吗?

标签 javascript reactjs redux side-effects mutation

我有一个对象作为键、值对存储在 url 中作为查询参数。该对象的键可能会更改,我想使用该对象中的每个键、值对来更新 redux 应用程序中 state 对象的键、值对。我需要以不改变 state 对象的方式这样做,并且我目前正在尝试按如下方式实现此目标:

case 'LOAD_SEARCH_FROM_URL':
  let _state = Object.assign({}, state);
  const args = action.obj.substring(1).split('&');
  args.map((arg) => {
    const split = arg.split('=');
    _state = Object.assign({}, _state, {
      [split[0]]: JSON.parse( decodeURIComponent( split[1] ) )
    })
  })
  return _state;

这在简单测试中运行良好,但我想确保这实际上没有执行任何突变。如果其他人可以就此问题提供任何见解,我将不胜感激!

最佳答案

不,Object.assign只会改变目标(第一个参数),在你的例子中是一个新创建的空对象。源(所有后续参数)不会被修改。

关于JavaScript:a = Object.assign({}, a, {k: v}) 会改变 a 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48082425/

相关文章:

javascript - 将代码从函数式 React hook 转换为类组件

javascript - 如何验证它必须是一个对象?

javascript - React event.target 仅针对一个输入元素未定义

reactjs - 无法使复选框与 redux-form 和 React-semantic-ui 一起使用

javascript - 为什么在 Redux 中看似默认调用了 reducer?

javascript - 关于在 HTML 中使用 JavaScript 和事件处理程序的问题

reactjs - 无法让 @mui 5 样式的组件工作

reactjs - 如何在 Immutablejs、Redux、Flux 和 React 中设置像计算属性一样的 Ember

javascript - 使用 redux-thunk/redux-observable 和 redux 的回调

javascript - 如何获取数据表列的名称?