有人向我解释为什么我们从不直接在 Redux 中写入状态?

Somebody explain to me why we never write directly to state in Redux?

我真的对 redux 中使用的 Object.assign() 感到困惑。

我不明白为什么下面的代码可以工作..

import { createStore } from "redux"

const userReducer = function (state={}, action) {
  switch (action.type) {
    case "CHANGE_USER_NAME":
      state.name = action.payload
      break;
    case "CHANGE_USER_AGE":
      state.age = action.payload
      break;
    default:
  }
  return state;
}

const store = createStore(userReducer)

store.subscribe(() => console.log(store.getState()))

store.dispatch({ type: "CHANGE_USER_NAME", payload: "paul" })
store.dispatch({ type: "CHANGE_USER_AGE", payload: 74 }) // It returned { name: "paul", age: 74 }
store.dispatch({ type: "CHANGE_USER_NAME", payload: "john" }) // It returned { name: "john", age: 74 } changed name to "john" but age is same. This point. is not immutable object?

我直接写state的值,但是结果是我期望的值...

user.name 已更改,但 user.age 未更改。

对我来说它看起来像是一个不可变的对象。我错了吗?

有人向我解释为什么我们从不直接写信给 state 吗? 对不起我的虚拟问题。我在想原因,但我不知道为什么..

const userReducer = function (state={
  name : "",
  age : ""
}, action) {
  switch (action.type) {
    case "CHANGE_USER_NAME":
      state ={
        ...state ,
        name : action.payload
      }
      break;
    case "CHANGE_USER_AGE":
      state ={
        ...state ,
        age : action.payload
      }
      break;
    default:
  }
  return state;
}

这是在状态中存储数据的正确方法,这样它就不会覆盖以前的状态。

要理解为什么我们总是想要 return 一个新对象,您必须了解函数式编程中的纯函数和副作用。

纯函数将参数作为输入数据,将 return 数据或函数作为输出。这允许我们不改变输入,而是从输入中产生新数据。

这样原来的state会保持不变,取而代之的是一个全新的state对象,让你的函数保持纯净,不会产生副作用。