React の setState と prevState
setState と prevState を紹介し、React で使用します。
React の setState と prevState
setState() と prevState() は、React クラスコンポーネントの状態を変更するために使用される useState フックです。
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つ増やすボタンをもう 1つ追加しましょう。
# react
<button onClick={IncrementByFive}>Increment By 5</button>
関数 IncrementByFive を作成しましょう。
# react
const IncrementByFive = () => {
for (let i = 0; i < 5; i++) {
setNum(num + 1);
}
};
この関数は 5 回ループして、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