【发布时间】:2021-09-26 14:31:43
【问题描述】:
我是 react.js 的新手。我正在关注 youtube 上的视频以学习 react.js。我正在处理简单的事件处理并陷入了一些问题。当用户在复选框上执行 onclick 功能时,我想选中/取消选中该复选框。但不知何故,返回的数组没有更新,复选框是不可操作的。我在下面粘贴我的代码:
App.js
import React from 'react'
import Header from './components/Header'
import Todolist from './components/Todolist'
import todosData from './data/todosData'
class App extends React.Component {
constructor(){
super()
this.state = {
todos: todosData
}
this.handleChange = this.handleChange.bind(this)
}
handleChange(id){
this.setState(prevState => {
console.log(prevState.todos)
const updatedTodos = prevState.todos.map(todo => {
if(todo.id === id){
todo.completed = !todo.completed
}
return todo
})
console.log(updatedTodos)
return{
todos : updatedTodos
}
})
}
render(){
const todoItems = this.state.todos.map(item => <Todolist key={item.id} item={item} handleChange={this.handleChange} />)
return (
<div>
<Header />
{todoItems}
</div>
)
}
}
export default App;
TodoList.js
import React from 'react'
function Todolist(props){
return(
<div className='todo-item'>
<input type='checkbox'
checked={props.item.completed}
onChange={() => props.handleChange(props.item.id)}
/>
<span>{props.item.text}</span>
</div>
)
}
export default Todolist
【问题讨论】:
-
您的
Todolist组件实际上应该命名为Todo或TodoItem,因为它代表一个单独的Todo 项。不正确的命名会影响理解并最终可能导致错误。 -
能否请您发布您的控制台的屏幕截图。
-
我复制了你的代码,它工作得很好。不知道你有什么问题:stackblitz.com/edit/react-zee3sl?file=src%2FApp.js
-
奇怪的是代码在你的端工作。可能是环境差异,也可能是您没有使用严格模式。
-
奇怪的是代码在你的端工作。可能是环境差异,也可能是您没有使用严格模式。
标签: reactjs react-hooks