【发布时间】:2019-06-11 07:47:19
【问题描述】:
预期效果:单击按钮 -> 调用函数 setEditing() -> 在 setEditing() 中调用函数 item() -> this.state.isEditing 更改为 true -> 父级中的 this.state.isEdit 更改为 true。当我调用item()函数时,isEditing的值没有变化
应用
class App extends React.Component {
constructor() {
super();
this.state = {
isEdit = false;
};
}
handleSomething = (value) => {
this.setState(prevState => {
return {
isEdit: value
};
});
}
render() {
return (
<div>
<ul>
{
this.state.todos
.map((todo, index) =>
<Todo
key={index}
index={index}
todo={todo}
handleSomething={this.handleSomething}
/>
)
}
</ul>
</div>
);
}
}
待办事项
class Todo extends Component {
state = {
isEditing: false
}
setEditing = () => {
this.setState({
isEditing: !this.state.isEditing
})
this.item();
}
item = () => {
const { isEditing} = this.state;
this.props.handleSomething(isEditing);
}
render() {
return (
<button onClick={() => this.setEditing()}>Edit</button>
)
}
}
【问题讨论】:
-
如果你需要在调用item之前状态肯定已经更新,你需要使用setState的第二个参数。
-
代码看起来不错,我认为问题必须处于状态必须为 isEditing 制作控制台并尝试过?
-
我检查了 console.log。 isEditing 总是错误的
-
那么发布的答案就可以解决问题
setEditing = () => { this.setState({ isEditing: !this.state.isEditing },()=> this.item()) } -
更改 this.state = { isEdit = false; }; to this.state = { isEdit : false };
标签: javascript reactjs ecmascript-6