React: 状態 X 派生状態

Linda Hamilton
リリース: 2024-09-24 08:30:10
オリジナル
231 人が閲覧しました

React: State X Derived State

派生状態とは何ですか?テキストに対して 1 つの状態を考えてから、uppercaseText に対して別の状態を考えてください。

派生状態

function Foo() {
    const [text, setText] = useState('hello, za warudo!');
    const [uppercaseText, setUppercaseText] = useState(text.toUpperCase());

    useEffect(() => {
        setUppercaseText(text.toUpperCase());
    }, [text])

    ...
}
ログイン後にコピー

そうは言っても、誰かがこれを行うと考えるのはクレイジーです...そうですよね?そうですよね?

はい、このような例を見れば、これが間違っていることがわかります。

派生状態の悪い点

  • 実際の状態とは同期せずに個別に保存されます。
  • 不要な再レンダリングに応じてトリガーされます。

派生状態をリファクタリングするにはどうすればよいですか?

それは高価な計算だと言えます...解決策は useMemo を使用することです。

function Foo() {
    const [text, setText] = useState('hello, za warudo!');
    const uppercaseText = useMemo(() => text.toUpperCase(), [text]);
    ...
}
ログイン後にコピー

導出可能な状態を素早く特定するにはどうすればよいでしょうか?

私は、状態が「別の状態」であるべきなのか、それとも単なる計算されたプロパティ (場合によっては記憶されるか否か) であるべきかを知るを容易にする良い考え方を思いつきました。

function Foo({
    text = 'hello, za warudo!',
    uppercaseText = text.toUpperCase(),
}) {
    ...
}

// Forget react for a moment...
// Would you ever call a function like this?
const text = 'hello, za warudo!';
Foo({
    text,
    uppercaseText: text.toUpperCase(),
});
ログイン後にコピー

これらの状態を「小道具」と考えると、それがあるべき姿がより露骨になります。

React を完全に忘れて、関数だけを考えてください:
変数を使用して関数を呼び出してから、内部で計算できる別の変数を呼び出しますか?

以上がReact: 状態 X 派生状態の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!