javascript - 将项目添加到状态内的数组时,渲染 React 应用程序不适用
问题描述
我正在努力制作一个用于练习的待办事项应用程序。出于某种原因,当我按下添加按钮时没有任何反应,但是如果我在输入字段上应用“onChange”,则创建的待办事项确实会显示在待办事项列表中。在过去的几个小时里,我一直在努力寻找解决方案,我相信我错过了一些东西......希望有人能弄清楚!
App.js
class App extends Component {
state = {
newTask: { id: 0, task: "" },
tasks: [
{ id: 1, task: "task1" },
{ id: 2, task: "task2" },
{ id: 3, task: "task3" }
]
};
newTask = e => {
this.setState({
newTask: { id: this.state.tasks.length + 1, task: e.target.value }
});
};
addTask = e => {
this.setState(prevState => {
prevState.tasks.push(this.state.newTask);
});
};
render() {
return (
<div className="App">
<Header title="Todo List" />
<Form input={this.newTask} add={this.addTask} />
<ul>
{this.state.tasks.map(t => (
<Tasks task={t.task} key={t.id} />
))}
</ul>
</div>
);
}
}
export default App;
const form = props => {
return (
<div>
<input
type="text"
placeholder="Type your task here..."
onChange={props.input}
/>
<button onClick={props.add}>Add</button>
</div>
);
};
const tasks = props => {
return <div>{props.task}</div>;
};
解决方案
你return
在. setState
_ addTask
因此,您实际上更新了状态,但不触发反应更新生命周期。
我想你可以这样尝试:
addTask = e => {
this.setState(prevState => {
return { tasks: [...prevState.tasks, this.state.newTask]};
});
};
推荐阅读
- python - Python Discord 机器人嵌入
- html - 我可以在 Spring Boot 环境中使用 ckEditor 使用 Thymeleaf 吗?
- swift - AF 没有成员“responseDecodable”与路由器
- mpandroidchart - 尝试在空对象引用 BarChart 上调用虚拟方法 'com.github.mikephil.charting.charts.BarChart.setMarker'
- c# - 使用 Cudafy 获取总 GPU 内存。返回最大 ulong 值
- python - 如何在 Python 中循环并增加 Excel 工作簿公式中的行?
- text - 允许从选定文件创建项目的 Macos 文本编辑器
- javascript - 如何从外部访问 js 包文件中的变量?
- python - 在 jupyter notebook 上显示 selenium webdriver 打开的 url
- python - 如何在python中模拟后续函数调用?