「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > React: 状態 X 派生状態

React: 状態 X 派生状態

2024 年 11 月 8 日に公開
ブラウズ:599

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

リリースステートメント この記事は次の場所に転載されています: https://dev.to/noriller/react-state-x-derived-state-2d2a?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3