How to toggle boolean state of react component? How to toggle boolean state of react component? reactjs reactjs

How to toggle boolean state of react component?


Since nobody posted this, I am posting the correct answer. If your new state update depends on the previous state, always use the functional form of setState which accepts as argument a function that returns a new state.

In your case:

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

See docs


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

If you are using the useState hook, then use the following code (in case your new state depends on the previous state):

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


You should use this.state.check instead of check.value here:

this.setState({check: !this.state.check})

But anyway it is bad practice to do it this way. Much better to move it to separate method and don't write callbacks directly in markup.

Upd:As pointed out in comments this approach might lead to unexpected results since React's state is asynchronous.The correct way in this case will be to use callback:

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


Here's an example using hooks (requires React >= 16.8.0)

// import React, { useState } from 'react';const { useState } = React;function App() {  const [checked, setChecked] = useState(false);  const toggleChecked = () => setChecked(value => !value);  return (    <input      type="checkbox"      checked={checked}      onChange={toggleChecked}    />  );}const rootElement = document.getElementById("root");ReactDOM.render(<App />, rootElement);
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script><script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script><div id="root"><div>