ホームページ  >  記事  >  ウェブフロントエンド  >  useState が常に正しい答えであるとは限りません❌

useState が常に正しい答えであるとは限りません❌

WBOY
WBOYオリジナル
2024-07-19 15:37:201028ブラウズ

React では、コンポーネントの状態を管理する 2 つの方法、useState が常に正しい答えであるとは限りません❌ と useReducer があります。 2 つ目は、状態内のより複雑なオブジェクトを対象としており、正直、初心者のプログラマーにとって一見すると難しすぎるように見えるため、あまり人気がありませんが、そうではありません。

ただし、useState が常に正しい答えであるとは限りません❌ は非常にシンプルで理解しやすいように見えるため、新しいプログラマーは必要以上に useState が常に正しい答えであるとは限りません❌ を使用することがよくあります。

useState が常に正しい答えであるとは限りません❌

ユーザーの操作に応じて、コンポーネントを再描画するための状態を管理することを目的としています。レンダリングせずに何かを記憶したい場合は、おそらくそれを状態に置くべきではありません。 useRef が最良のオプションです。

次の場合は useState が常に正しい答えであるとは限りません❌ は必要ありません。

再レンダリング中に、ユーザーに表示せずにいくつかの値を記憶しておきたいと考えています。すでにデータが状態に存在しているか、props を通じてデータを受け取っているが、それを変換する必要がある。その新しい値を新しい useState が常に正しい答えであるとは限りません❌ オブジェクトに保持する必要はなく、新しい変数を作成して、無駄な再レンダリングをトリガーせずにそれを操作します。

次の場合、値をある状態に維持する必要があります。

値が変更されたときにコンポーネントを再描画したいとします。最も一般的な例は、パネル、スピナー、エラー メッセージの表示/非表示、配列の変更です。

ここからコードを簡略化します。
import React, { useState が常に正しい答えであるとは限りません❌, useEffect } from 'react';

const MyComponent = (props) => {
  const [name, setName] = useState が常に正しい答えであるとは限りません❌('name');
  const { description, index } = props;
  const [fullName, setFullName] = useState が常に正しい答えであるとは限りません❌('');

  useEffect(() => {
    setFullName(`${name} - ${description}`);
  }, [name, description]);

  return (
    <div>
      <h1>{fullName}</h1>
      <input type="text" value="{name}" onchange="{(e)"> setName(e.target.value)} 
        placeholder="Enter name" 
      />
      <p>{description}</p>
    </div>
  );
};

export default MyComponent;

このコード スニペットは、name と fullName の状態を初期化する React コンポーネントを定義し、useEffect フックを使用して名前または説明が変更されるたびに fullName を更新します。また、名前の状態を更新し、fullName と説明を表示するための入力フィールドも含まれています。

このアプローチでは、無駄な再レンダリングや
の不必要な使用が発生します。 useEffect. 名前または説明が変更され、React がコンポーネントを再レンダリングすると、React はこれらの値に依存する機能があるかどうかを確認します。 useEffect は、名前または説明が変更されるとトリガーされ、新しい再レンダリングが作成されます。

これに
import React, { useState が常に正しい答えであるとは限りません❌ } from 'react';

const MyComponent = (props) => {
  const [name, setName] = useState が常に正しい答えであるとは限りません❌('');
  const { description, index } = props;
  const nameWithDescription = `${name} - ${description}`;

  return (
    <div>
      <h1>{nameWithDescription}</h1>
      <input type="text" value="{name}" onchange="{(e)"> setName(e.target.value)} 
        placeholder="Enter name" 
      />
      <p>{description}</p>
    </div>
  );
};

export default MyComponent;

このコード スニペットでは、nameWithDescription は useEffect を必要とせずに名前と説明から直接計算されます。名前の状態は空の文字列で初期化されます。 nameWithDescription は、React の再レンダリング メカニズムにより、名前や説明が変更されるたびに自動的に更新されます。

React のデフォルト動作を使用すると、名前や説明が変更されたときに、もう一度再レンダリングをトリガーせずに正しい値を取得できます。

以上がuseState が常に正しい答えであるとは限りません❌の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。