【发布时间】:2020-12-22 04:14:14
【问题描述】:
我正在开发一个简单的 ToDo 应用程序,目前我正忙于更新我的 App.js 组件的状态。
这是我的 App.js:
import React, { Component } from "react";
import TodoItem from "./ToDoItem";
import todosData from "./ToDoData";
class App extends Component {
constructor() {
super();
this.state = {
loadedData: todosData,
};
}
newChange = (id) => {
const update = this.state.loadedData.map((todo) => {
if (todo.id === id) {
todo.completed = !todo.completed;
}
return todo;
});
// this is where my update variable will not update?
console.log(update);
this.setState({ loadedData: update });
};
render() {
const todoComponent = this.state.loadedData.map((item) => (
<TodoItem
key={item.id}
text={item.text}
completed={item.completed}
newChange={this.newChange}
/>
));
return <div className="todo-list">{todoComponent}</div>;
}
}
export default App;
这是我的 TodoItem 组件(我猜一旦此状态正确传递,它就会正常工作):
import React from "react";
class TodoItem extends React.Component {
render() {
return (
<div className="todo-item">
<input
type="checkbox"
checked={this.props.completed}
onChange={() => this.props.newChange(this.props.id)}
/>
<p>{this.props.text}</p>
</div>
);
}
}
export default TodoItem;
最后,我的数据只是一个由对象组成的数组:
const todosData = [
{
id: 1,
text: "Take out the trash",
completed: true
},
{
id: 2,
text: "Grocery shopping",
completed: false
},
{
id: 3,
text: "Clean gecko tank",
completed: false
},
{
id: 4,
text: "Mow lawn",
completed: true
},
{
id: 5,
text: "Catch up on Arrested Development",
completed: false
}
]
export default todosData
我最大的问题是为什么我的 newChange() 方法中的 update 变量在我映射时没有得到更新?
当我 console.log 它显示完全相同的数据并且我想要的属性没有得到更新?
loadedData 仍然与 update 完全相同。
【问题讨论】:
标签: javascript reactjs ecmascript-6 array.prototype.map