2 回答
TA贡献1812条经验 获得超5个赞
您可以尝试使 if 条件内联,这样您就不会使用return. 就像是:
handleChange (id){
this.setState((prevState)=>{
const todos = prevState.myTodos.map(item =>
(item.id === id) ? {...item, completed: !item.completed} : item )
})
}
编辑:此解决方案有效,因为它使用扩展语法返回一个新的 JS 对象{...item, completed: !item.completed}。反过来,这会强制执行新的渲染调用。
TA贡献1798条经验 获得超3个赞
请检查这个片段
import React, { Component } from "react";
import "./styles.css";
class App extends Component {
state = {
myTodos: [
{ id: 1, title: "wake up", completed: false },
{ id: 2, title: "brush", completed: false }
]
};
handleChange = (id) => {
this.setState((prevState) => ({
myTodos: prevState.myTodos.map((todo) => {
if (todo.id === id) {
return { ...todo, completed: !todo.completed };
}
return todo;
})
}));
};
render() {
return (
<div className="App">
<h1>TODOS</h1>
{this.state.myTodos.map((todo) =>
todo.completed ? (
<del>
<p onClick={() => this.handleChange(todo.id)}>{todo.title}</p>
</del>
) : (
<p onClick={() => this.handleChange(todo.id)}>{todo.title}</p>
)
)}
</div>
);
}
}
export default App;
工作 代码沙盒
问题:
您没有以真实状态返回该对象
添加回答
举报