【发布时间】:2021-12-30 07:34:02
【问题描述】:
我发现控制台中的 state.elements 已更改,即使我还没有发送。 是什么原因?
const initialState = { elements: [['apple','banana'],['rabbit','cat']] };
function reducer(state, action) {
switch (action.type) {
case "increment":
return { count: state.count + 1 };
case "decrement":
return { count: state.count - 1 };
default:
throw new Error();
}
}
function Counter() {
const [state, dispatch] = React.useReducer(reducer, initialState);
const changeList=()=>{
const elementsArray = Array.from(state.elements);
elementsArray[0][0]='Tiger'
}
return (
<>
Count: {state.elements}
<button onClick={changeList}>Change List without dispatch</button>
</>
);
}
【问题讨论】:
-
是的,
elementsArray[0][0]='Tiger'是一个状态突变。您应该向useReducer钩子发送一个操作以更新状态中的 that 元素。这似乎是一个非常人为的代码示例,但您真正想要做什么?或者如果可以改变状态,你的帖子真的像 YES|NO 一样简单吗? -
我将复杂的代码简化为发布堆栈流。我在没有调度的情况下多次按下按钮,我看到即使我没有调度元素也发生了变化,并且它也呈现在屏幕上。
-
这是我github中的原始代码。 github.com/piaojing/react-zero/commit/…
标签: javascript react-hooks use-reducer