React 中的 setState 和 prevState
我們將介紹 setState
和 prevState
並在 React 中使用它們。
React 中的 setState
和 prevState
setState()
和 prevState()
是 useState
鉤子,用於更改 React 類元件中的狀態。
setState()
表示該元件及其子元件發生了變化,需要使用更新後的狀態重新渲染。setState
是用於更新 UI 以響應事件處理程式和伺服器響應的主要方法。
prevState()
與 setState
相同,但它們之間的唯一區別是,如果我們想根據該元件的先前狀態更改該元件的狀態,我們使用 this.setState()
,它為我們提供了 prevState
。
讓我們檢查一個計數器應用程式的示例。這可以增加、減少、重置數字。
首先,我們將建立一個新檔案 Counter.js
。在 Counter.js
我們將 import React from "react";
並建立一個名為 Counter()
的函式。
在 Counter()
中,我們將初始化我們的常量 initialNum
、num
和 setNum
# react
import React from "react";
function Counter() {
const initialNum = 0;
const [num, setNum] = React.useState(initialNum);
}
我們將返回帶有按鈕和計數器顯示的 HTML。因此,Counter.js
將如下所示。
# react
import React from "react";
function Counter() {
const initialNum = 0;
const [num, setNum] = React.useState(initialNum);
};
return (
<div>
<p>Counter: {num}</p>
<button onClick={() => setNum(initialNum)}>Reset</button>
<button onClick={() => setNum(num + 1)}>Increment</button>
<button onClick={() => setNum(num - 1)}>Decrement</button>
</div>
);
}
export default Counter;
讓我們在 App.js
中包含 Counter.js
並新增它的元件。App.js
將如下所示。
# react
import "./styles.css";
import Counter from "./Counter.js";
export default function App() {
return (
<div className="App">
<Counter />
</div>
);
}
現在,讓我們測試一下我們的計數器。
輸出:
讓我們新增另一個按鈕,將計數器增加 5。
# react
<button onClick={IncrementByFive}>Increment By 5</button>
讓我們建立一個函式 IncrementByFive
。
# react
const IncrementByFive = () => {
for (let i = 0; i < 5; i++) {
setNum(num + 1);
}
};
此函式將迴圈五次以將其遞增 5。
現在,讓我們測試我們的計數器應用程式。
輸出:
當我們點選 Increment by 5
按鈕時,它只會將計數器增加 1。
這是因為在 setNum(num + 1);
有多個 setNum
呼叫,因此 React 將所有這些呼叫分組並僅在最後一次呼叫 setNum
時更新狀態,並且因為在最後一次呼叫中 setNum
尚未更新並且仍然具有相同的值,所以它僅將其增加 1。
這就是 prevState
派上用場並像冠軍一樣解決我們的問題的時候。現在,讓我們使用 prevState
重寫我們的計數器應用程式。
基本上,我們不是傳入新狀態變數的值,而是傳入一個可以訪問舊狀態值的函式。因此,現在我們將通過更改 setNum(num + 1);
來更改 IncrementByFive
函式到 setNum(prevNum => prevNum + 1);
。
因此,我們的函式將如下所示。
# react
const IncrementByFive = () => {
for (let i = 0; i < 5; i++) {
setNum(prevNum => prevNum + 1);
}
};
現在,讓我們測試我們的計數器應用程式。
輸出:
在上面的結果中,當我們點選 Increment by 5
時,它會增加 5。
讓我們也使用 prevState
來更正我們的其他按鈕。
Counter.js
如下所示。
# react
import React from "react";
function Counter() {
const initialNum = 0;
const [num, setNum] = React.useState(initialNum);
const IncrementByFive = () => {
for (let i = 0; i < 5; i++) {
setNum((prevNum) => prevNum + 1);
}
};
return (
<div>
<p>Counter: {num}</p>
<button onClick={() => setNum(initialNum)}>Reset</button>
<button onClick={() => setNum((prevNum) => prevNum + 1)}>
Increment
</button>
<button onClick={() => setNum((prevNum) => prevNum - 1)}>
Decrement
</button>
<button onClick={IncrementByFive}>Increment By 5</button>
</div>
);
}
export default Counter;
因此,在本指南中,我們瞭解了可以使用 prevState
解決的問題,並且我們還使用 setState
和 prevState
在 React 中構建了一個基本的計數器應用程式。
Rana is a computer science graduate passionate about helping people to build and diagnose scalable web application problems and problems developers face across the full-stack.
LinkedIn