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;
工作 代碼沙盒
問題:
您沒有以真實狀態返回該對象
添加回答
舉報