How to toggle a boolean state in React
Toggle a boolean state in React:
-
Use
useState
the hook to track the state of a boolean value. -
Pass a function to
setState
the function returned by the hook. -
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>
);
}
We setIsLoading
pass a function to , because isLoading
that 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.
setIsLoading
If 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 useEffect
the 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, useEffect
the 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.
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.
React tutorial: Types of Props for child components
Publish Date:2025/03/16 Views:170 Category:React
-
Usually, the child components of a React component are a group, that is, the child components are an array. Introduction to Type of the Children Props.
How to solve the error Uncaught TypeError: Cannot read properties of undefined in
Publish Date:2025/03/16 Views:150 Category:React
-
In the process of React development, we often encounter some errors. Here we look at an error reported in App.js. The error is as follows: App.js:69 Uncaught TypeError: Cannot read properties of undefined (reading 'setState') at onInput
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.
Error in React: Attempted import error 'X' is not exported from Solution
Publish Date:2025/03/16 Views:76 Category:React
-
In React, the error “Attempted import error 'X' is not exported from” in React.js occurs when we try to import a named import that does not exist in the specified file. To fix the error, make sure the module has named exports and you have not obfu
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