【发布时间】:2019-09-29 01:48:48
【问题描述】:
我正在尝试映射处于状态的对象数组,有条件地从该状态返回两个反应组件之一。然后我会在某个时候更改该状态,并希望组件在其对象状态更改时重新渲染。我知道我的问题与 React 无法识别差异中的变化有关,但我不确定为什么以及需要更改什么模式才能使其正常工作。
这是一个代码笔: https://codepen.io/steven-harlow/pen/KKPLXRO
以及其中的代码:
const App = (props) => {
const [todos, setTodos] = React.useState([
{name: 'A', done: false},
{name: 'B', done: false},
{name: 'C', done: false},
])
React.useEffect(() => {
}, [todos])
const handleClick = (name) => {
const index = todos.find(todo => todo.name == name)
let tempTodos = todos;
tempTodos[index].done = true;
setTodos(tempTodos);
}
return (
<div>
<h1>Hello, world!</h1>
<div>
{todos.map(todo => {
return todo.done ? (<div key={'done' + todo.name}>{todo.name} : done</div>) : (<div onClick={() => handleClick(todo.name)} key={'notdone' + todo.name}>{todo.name} : not done</div>)
})}
</div>
</div>
)
}
【问题讨论】:
-
在此处查看更新的 codepen codepen.io/marudhupandiyang/pen/WNeBZYB
-
如果你需要索引你应该使用
findIndex而不是find。如果您需要查找,我发送的灵魂将起作用。 -
感谢@Panther。我的实际代码使用了 findIndex,但我快速通过并错过了那个 codepen。看起来我的错误是我假设我正在创建一个新数组(我已经阅读过它是需要的),而我只是引用了旧数组。
标签: reactjs react-hooks