React の setState と prevState

Rana Hasnain Khan 2022年12月21日
React の setState と prevState

setStateprevState を紹介し、React で使用します。

React の setStateprevState

setState()prevState() は、React クラスコンポーネントの状態を変更するために使用される useState フックです。

setState() は、このコンポーネントとその子コンポーネントが変更されており、更新された状態で再レンダリングする必要があることを示します。setState は、イベントハンドラーとサーバーの応答に応じて UI を更新するために使用される主要なメソッドです。

prevState()setState と同じですが、両者の唯一の違いは、コンポーネントの以前の状態に基づいてコンポーネントの状態を変更する場合は、this.setState() を使用することです。これは prevState を提供します。

カウンターアプリの例を見てみましょう。これにより、数値をインクリメント、デクリメント、リセットできます。

まず、新しいファイル Counter.js を作成します。Counter.js では、import React from "react"; とし、Counter() という関数を作成します。

Counter() では、定数 initialNumnum、および 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.jsCounter.js を含め、そのコンポーネントを追加しましょう。App.js は以下のようになります。

# react
import "./styles.css";
import Counter from "./Counter.js";

export default function App() {
  return (
    <div className="App">
      <Counter />
    </div>
  );
}

それでは、カウンターをテストしてみましょう。

出力:

setState を使用したカウンターアプリ

カウンターを 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 ずつインクリメントします。

それでは、カウンターアプリをテストしてみましょう。

出力:

setState を使用した incrementbyfive 関数を備えたカウンターアプリ

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);
    }
  };

それでは、カウンターアプリをテストしてみましょう。

出力:

prevState を使用した incrementbyfive 関数を備えたカウンターアプリ

上記の結果では、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 を使用して解決できる問題について学び、setStateprevState を使用して React で基本的なカウンターアプリを構築しました。

Rana Hasnain Khan avatar Rana Hasnain Khan avatar

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