JIYIK CN >

Current Location:Home > Learning > WEB FRONT-END > React >

How to toggle a boolean state in React

Author:JIYIK Last Updated:2025/03/16 Views:

Toggle a boolean state in React:

  1. Use useStatethe hook to track the state of a boolean value.
  2. Pass a function to setStatethe function returned by the hook.
  3. Toggle a boolean value depending on its current value, setIsLoading(current => !current)e.g.
import {useState} from 'react';

export default function App() {
  // 👇️ initialize boolean to false
  const [isLoading, setIsLoading] = useState(false);

  const toggleIsLoading = () => {
    // 👇️ passed function to setState
    setIsLoading(current => !current);
  };

  return (
    <div>
      <button onClick={toggleIsLoading}>Toggle loading state</button>
      {isLoading && <h2>Loading...</h2>}
    </div>
  );
}

Toggling Boolean States in React

We setIsLoadingpass a function to , because isLoadingthat function is guaranteed to be called with the current (latest) value of the boolean.

In the example, we simply toggle the boolean and return the result to update the state.

We use logical NOT (!)operators to flip Boolean values.

Following are some examples of using the logical NOT operator.

console.log(!true); // 👉️ false console.log(!false); // 👉️ true

注意, we should not try to access a boolean state variable immediately after changing it.

setIsLoadingIf we try to access a state variable immediately after updating it using the function isLoading, there is no guarantee that we will get the current (latest) value.

If we need to listen to state changes, add the state variable to useEffectthe dependencies array of the hook.

import {useEffect, useState} from 'react';

export default function App() {
  const [isLoading, setIsLoading] = useState(false);

  const toggleIsLoading = () => {
    // 👇️ passed function to setState
    setIsLoading(current => !current);
  };

  useEffect(() => {
    // 👇️ 如果我们需要监听 isLoading 布尔值的变化
    console.log('isLoading is: ', isLoading);
  }, [isLoading]);

  return (
    <div>
      <button onClick={toggleIsLoading}>Toggle loading state</button>
      {isLoading && <h2>Loading...</h2>}
    </div>
  );
}

We added the isLoading state variable to the hook's dependencies array, so any time isLoading changes, useEffectthe logic in our hook will re-run.

注意, which is also called when mounting a component.

If we don't want to run the logic in the hook on the initial render useEffect, but only when a specific state variable changes, use a ref to return early on the initial render.

import {useEffect, useState, useRef} from 'react';

export default function App() {
  const [isLoading, setIsLoading] = useState(false);

  const toggleIsLoading = () => {
    setIsLoading(current => !current);
  };

  const isFirstRender = useRef(true);

  useEffect(() => {
    if (isFirstRender.current) {
      isFirstRender.current = false;
      return; // 👈️ return early if first render
    }

    console.log('isLoading is: ', isLoading);
  }, [isLoading]);

  return (
    <div>
      <button onClick={toggleIsLoading}>Toggle loading state</button>
      {isLoading && <h2>Loading...</h2>}
    </div>
  );
}

When running the hook on mount useEffect, we use ref to exit early.

Use this method if we want to listen to state changes but need to skip the first render.

For reprinting, please send an email to 1244347461@qq.com for approval. After obtaining the author's consent, kindly include the source as a link.

Article URL:

Related Articles

React Tutorial - Transferring Props

Publish Date:2025/03/16 Views:185 Category:React

React transfers Props. Props are generated when components are encapsulated. Components expose some properties (Props) to the outside world to complete some functions.

React Tutorial: Props Anti-Pattern

Publish Date:2025/03/16 Views:183 Category:React

React's Props anti-pattern, using Props to generate state in getInitialState is an anti-pattern - Anti-Pattern.

React Tutorial - Props Validation

Publish Date:2025/03/16 Views:99 Category:React

Props validation is a very useful way to use components correctly. It can avoid many bugs and problems as your application becomes more and more complex. In addition, it can make your program more readable.

Why do you need to bind event handlers in React Class Components?

Publish Date:2025/03/16 Views:58 Category:React

When using React, we must have come across control components and event handlers. We need to use `.bind()` in the constructor of the custom component to bind these methods to the component instance. As shown in the following code:

Solution to the error "does not contain a default export" in React

Publish Date:2025/03/16 Views:187 Category:React

When we try to use `default import` to import from a module that does not have a `default export`, we get a "does not contain a default export" error. To fix the error, make sure the module has named exports and wrap the import in curly braces, e.g.

Solve the Module not found: Can't resolve 'react-bootstrap' error

Publish Date:2025/03/16 Views:85 Category:React

To resolve the error "Module not found: Error: Can't resolve 'react-bootstrap'", make sure to install the react-bootstrap package by opening a terminal in the root directory of the project and running the command `npm install react-bootstrap bootstrap

Scan to Read All Tech Tutorials

Social Media
  • https://www.github.com/onmpw
  • qq:1244347461

Recommended

Tags

Scan the Code
Easier Access Tutorial