我正在学习React。我有问题。我无法将“未完成”设置为“完成”。我想寻求帮助。如果不难,我想举个例子来说明如何实现。如果我有错误,对不起。我英语不好。
class ToDoList extends React.Component {
constructor(props) {
super(props)
this.state = {
completed: true
}
this.handleClick = this.handleClick.bind(this);
}
render () {
const { items} = this.props
return (
<table>
{items.map(item => (
<tr className="hr">
<td className="col1">{item.id}</td>
<td className="col2">{item.text}</td>
<td className="col3">{item.date}</td>
<td className="col4">{this.state.сompleted ? 'Done' : 'Not Done'}</td>
<td className="col5"><button onClick ={ this.handleClick }className="btn btn-xs btn-success img-circle">✓</button></td>
</tr>
))}
</table>
)
}
handleClick() {
console.log('---', 'completed')
// this.setState({
// completed: !this.state.completed
// })
if (this.state.completed = true) {
this.state.completed = false
}
}
}
答案 0 :(得分:0)
不要将值直接分配给状态属性。请改用setState()
。
您的处理函数可能是:
handleClick = () => { // arrow functions are bound by default
console.log('---', 'completed');
this.setState({ completed: !this.state.completed });
}
答案 1 :(得分:0)
if (this.state.completed = true) {
this.setState({completed:false })
}
答案 2 :(得分:0)
只需单击按钮即可切换状态
this.setState(prevState => ({completed: !prevState.completed}))
编辑:
我认为问题在这里还不清楚。
OP的数组为items
,他只想为点击的项目设置Done
或Not Done
。
注释的代码有效,但是它更改了每个项目的状态,这不是OP想要的。要解决此问题,您需要为每个商品都拥有一个属性completed
,并仅更新该商品的属性。
答案 3 :(得分:0)
更正this.state.completed
,因为您完成的c具有不同的字体
class ToDoList extends React.Component {
constructor(props) {
super(props)
this.state = {
completed: true
}
}
handleClick=()=> {
this.setState(prevState=>({completed:!prevState.completed}))
}
render () {
const { items} = this.props
const { completed } = this.state;
return (
<table>
{items.map(item => (
<tr className="hr">
<td className="col1">{item.id}</td>
<td className="col2">{item.text}</td>
<td className="col3">{item.date}</td>
<td className="col4">{completed ? 'Done' : 'Not Done'}</td>
<td className="col5"><button onClick ={ this.handleClick }className="btn btn-xs btn-success img-circle">✓</button></td>
</tr>
))}
</table>
)
}
}
答案 4 :(得分:0)
1) 您不能像这样直接更改状态:
this.sate.completed = !this.state.completed
您必须使用方法“ this.setState”,如下所示:
this.setState({completed: !this.state.completed})
2),如果“ sintax”也是错误的,则应使用双“ ==”,如下所示:
if (this.state.completed == true) {
...
}
3),您应该使用箭头功能:
handleClick = () => {
...
}
否则,您需要像这样调用函数:
this.handleClick.bind(this)