【发布时间】:2020-12-10 08:19:03
【问题描述】:
这是我的类组件:
import React from 'react';
import { Jumbotron, Container, Label } from 'reactstrap';
import './Css.css';
class Settings extends React.Component {
state = {
isChecked: false,
}
isCheck(e) {
this.setState({
isChecked: e.target.checked
})
console.log(e.target.checked)
console.log(this.state.isChecked)
}
render() {
return (
<div className="margin">
<Jumbotron fluid>
<Container fluid>
<h1 className="display-3">Settings</h1>
<div className="groupbox">
<Label className="lead">This is a checkbox</Label>
<input class="apple-switch" type="checkbox" onChange={e => this.isCheck(e)} />
</div>
</Container>
</Jumbotron>
</div>
);
}
}
export default Settings;
我遇到的问题是我在控制台中得到的值是相反的。
所以当复选框未选中时e.target.checked 是false 但this.state.isChecked 是true,当复选框被选中时e.target.checked 是true 和this.state.isChecked 是false。
我不知道为什么会遇到这个问题。
- 我做错了什么吗?
我还尝试将e.target.checked 存储到const checked,然后将其传递给setState(),但它给了我同样的东西。
感谢任何帮助。
【问题讨论】:
-
这能回答你的问题吗? React setState not Updating Immediately TL;DR React 状态更新是异步的,并且在 渲染周期之间进行批处理,您只需记录 当前 渲染周期的状态与排队等待的状态下一个 渲染周期。如果要记录状态更新,请使用
componentDidUpdate生命周期函数或setState回调。 -
@DrewReese 不,它没有。
-
事实上,确实如此......这个问题几乎每天都会被问到。我刚刚进行了搜索,这是结果中投票数最高的第一个。
-
@DrewReese 用
this.state.isChecked = e.target.checked代替setState()好不好?因为它给了我想要的东西。 -
这将是一个状态突变,应该避免。 reactjs.org/docs/state-and-lifecycle.html#using-state-correctly
标签: reactjs class checkbox setstate