我想知道如何切换React组件的布尔状态.例如:

我在组件的构造函数中进行了布尔状态判断:

constructor(props, context) { 
   super(props, context);

   this.state = {
      check: false
   };
};

每次单击复选框时,我都会try 使用this.setState方法切换状态:

<label>
  <input
    type=checkbox"
    value="check"
    onChange={(e) => this.setState({check: !check.value})}
  />
  Checkbox
</label>

我当然得了Uncaught ReferenceError: check is not defined分.

推荐答案

因为没有人发布这篇文章,所以我发布了正确的答案.如果新状态更新依赖于以前的状态,请始终使用函数形式setState,它接受一个返回新状态的函数作为参数.

就你而言:

this.setState(prevState => ({
  check: !prevState.check
}));

docs


Since this answer is becoming popular, adding the approach that should be used for React Hooks (v16.8+):

如果您使用的是useState钩子,那么请使用以下代码(如果您的新状态取决于以前的状态):

const [check, setCheck] = useState(false);
// ...
setCheck(prevCheck => !prevCheck);

Reactjs相关问答推荐

运行 node server.js会导致以下错误:Route.post()需要回调函数,但在Route.&处得到了[对象Undefined] lt;计算>

在迁移到Redux—Toolkit 2.0和Redux5.0之后,我在extraReducer和Slice方面有点挣扎,

客户端组件中服务器组件的两难境地

如何在MUI X数据网格列中显示IMG?

ReactJs;Reaction-Hook-Form:仅当 Select 了特定 Select 列表选项时才显示文本输入

为什么我的React App.js只在页面刷新时呈现3次?

React Router:在没有手动页面刷新的情况下,路由不会更新内容

react -无法获取函数的最新参数值

useState导致对函数的无休止调用

悬停轴时重新绘制自定义参照线

如何修复ReferenceError:在构建过程中未定义导航器

Material-UI 和 React Hook 表单不记录值

页面不显示

来自一个自定义 React Native 组件的样式从另一个自定义组件移除样式

Storybook - 无法解析generated-stories-entry.cjs/字段browser不包含有效的别名配置

使用 React 中的功能组件更改另一个组件的状态

在 React 中,为什么不能向空片段添加键(短语法)?

如何不旋转 mui 自动完成弹出图标?

在 React 中使用使用状态挂钩合并两个数组

RTK 查询 POST 方法不会改变数据