反応: usestate ()の使用方法


このブログでは、機能的なコンポーネントとフックでそれを使用する文脈で、厳密に議論します.

何がUSENTですか?

useState は、開発者がコンポーネントのレンダリングライフサイクルを通して持続する変数を格納できるようにするResponseライブラリの組み込みメソッドです.多くの変数のように、状態を呼び出すことができ、コンポーネント全体に変異.状態は、子要素への支柱としても渡されることができます.状態は、バニラJavaScriptではなく、宣言された変数を再利用することができますlet 適切な範囲内の他の場所.このGochyaは少しの構文上の重みを加えるかuseState しかし、それは簡単に管理することができます.
使うuseState 次のようにコンポーネントの先頭にインポートしなければなりません:
import { useState } from "react"

Note that if you are using a React version older than version 17, then your syntax for import will look like: import React, { useState } from "react"


実施するuseState あなたは、あなたの機能的なコンポーネントの中にUSENT課題呼び出しを挿入します.例えば、私たちはhealth ゲームの選手が反応したとき
import { useState } from "react"

function Player() {
    const [health, setHealth] = useState(100)
    return (
        <div>
            <h1>Hello, Player</h1>
        </div>
    )
}

export default Inventory
状態を設定しているコードの行に集中しましょう.
const [health, setHealth] = useState(100)
useState 配列を返します.タプルは集合長の配列です.JavaScriptが正式にタプルを持っていない間、UseStateはタプルを返すと言うことができますが、長さ2の配列を返します.
配列useState 特定の順序を返します.最初のインデックスは変数の現在の状態のために予約されます、そして、秒インデックスはこのケースの値を変異させることができるセッター機能のために予約されます.health 参照現在のプレーヤーの健康の値.setHealth 参照する関数は、aと引数、またはbのいずれかをとる関数ですhealth . 慣例では、setter関数はset 必要ありませんが.また、1つの呼び出しuseState この例では、配列の破壊を使用して参照します.
最後に、数100 インuseState を初期化するhealth100 .
つまり、状態変数を宣言するための構文を、より読みやすいpsuedoコードに分解することができます.
const [declare the variable name, declare setter function to change variable] = useState(initial value)
では、どのように新しい状態値を設定するのですか?
ほとんどの場合、それはsetHealth(80) . これは100 に設定する80 . ただし、現在の値に追加する場合は、setterにコールバックを使用する必要があります.だから30 現在の健康の現在価値80 ), 使用するsetHealth(health => health += 30) .
基本的には、setter関数が非同期であるためです.コールバックを実装することで、状態の現在の値を参照します.コールバックを使用しない場合は、値を無理やり設定し、値を設定するのを待ちません.このコールバック構造体は、一連のセッターをチェーン化したいときに便利になります.例えば
setHealth((health) => (health += 30))
setHealth((health) => (health += 30))
setHealth((health) => (health += 30))
仮定するhealth 開始100 その後、健康190 この操作の最後に.コールバックを使用しなかった場合、値は異なっています.
setHealth(health += 30))
setHealth(health += 30))
setHealth(health += 30))
場合によっては130 最終的な値として.この予期しない動作は、あなたがいつでもあなたが操作しようとしている州の最も現在の価値を得ているのを確実にするためにあなたのセッター機能でコールバックを使うべきである理由です.
JavaScriptから来ているなら、変数を宣言するにはたくさんの仕事があるかもしれません.なぜ私たちはconst health = 100 そして、コードの後で、それを更新するためにhealth = 80 ?
反応コンポーネントはレンダリングライフサイクルを持っています.コンポーネントが再レンダリングされるたびに、それはそのキャッシュの中で本質的にすべての変数を再定義します.このダイアグラムの「更新」列を見るとsetState() レンダリングが発生します.

Source
状態に新しい値を設定すると、コンポーネント全体が自動的に再表示され、新しい値を表すUIが更新されます.これは、反応がその名前を得るところです.セッティング状態は、あなたがそれを与える変化に「反応する」ように反応を指示します.無効にするには、JavaScriptを教えてください.ライブラリとしての反応は、すべて単独で処理します.
したがって、状態変数の設定関数を呼び出すと、コンポーネントの再描画が行われます.いくつかの警告をここでは、状態が反応しない場合のように反応して十分に再レンダリングしないスマートです.

どのようなフードの下の状態ですか?


私はこのノートであなたを残します.そして、私は、どのように州が実際に反応によって舞台裏で扱われるかについて、面白かったです:
状態は、コンポーネントの現在の状況に関する情報を表すために反応によって使用されるプレーンなJavaScriptオブジェクトです.それは、(関数で宣言されたどんな変数のようにでも)コンポーネントで管理されますCitation .