Reactの3つの主要属性におけるpropsの使用の詳細な説明

Reactの3つの主要属性におけるpropsの使用の詳細な説明

前回は状態について説明しました。次は、props について説明しましょう。 props の機能は、コンポーネント (親子コンポーネント) 間の通信です。まず、さまざまなコンポーネントでの使用方法について説明します。

クラスコンポーネント

//親コンポーネントの値を渡すクラス Father extends React.PureComponent{
    与える(){
        戻る (
            <息子値={"息子"} />
        )
    }
}

クラスSonはReact.PureComponentを拡張します{
    与える(){
        戻る (
            <div>このデータは {this.props.value} です</div>
        )
    }
}

機能コンポーネント

関数Fa(){
    戻る (
        <息子値={"息子"} />
    )
}

関数Son(props){
    戻る (
        <div>このデータは {props.value} です</div>
    )
}

関数コンポーネントでは、propsは値を渡すだけでよいので非常に便利です。Reactのドキュメントでは、propsの説明は

React要素がユーザー定義コンポーネントの場合、JSXが受け取った属性と子要素を単一のオブジェクトに変換し、コンポーネントに渡します。このオブジェクトは「props」と呼ばれます。

したがって、propsを介して親コンポーネントによってアップロードされた値を取得でき、 props.childrenを介してjsxで記述された子コンポーネントを直接取得することもできます。

プロパティは読み取り専用です

Reactはドキュメントで強調している

すべての React コンポーネントは、純粋関数と同様に、プロパティが変更されないように保護する必要があります。

redux の純粋関数の概念についてはすでに説明しました。簡単に言うと、props の値を変更することはできません。

コンポーネント間通信

ここで、コンポーネント間の通信をまとめてみましょう。

  • props まず、クラスコンポーネントを記述しましょう。
// 親コンポーネントから子コンポーネントに値を渡すことについては既に説明しました。次に、子コンポーネントが親コンポーネントに値を渡す方法をまとめます。このとき、親コンポーネントは最初に子コンポーネントに props 関数を渡す必要があることがよくあります。子コンポーネントは渡された関数を呼び出して親コンポーネントの値を変更します export default class Fa extends Component {
    状態 = {faValue:'Fa1'}

    changeFa = (値)=>{
        this.setState(()=>{
            {faValue:値}を返す
        })
    }
    与える() {
        戻る (
            <>
                <h1>Fa の値は {this.state.faValue}</h1> です
                <Son changeFa={this.changeFa}/>
            </>
        )
    }
}

デフォルトのクラスSonをエクスポートしてReact.PureComponentを拡張します{

    変更値 = ()=>{
        this.props.changeFa(this.inputRef.value)
    }
    与える() {
        戻る (
            <>
                <input type="text" placeholder={"値を入力してください"} ref={(el)=>{this.inputRef = el}}/>
                <button onClick={this.changeValue}>変更</button>
            </>
        )
    }
}

次に関数コンポーネントを記述します。

関数Fa(){
    const [faValue,setFaValue] = useState("Fa1")

    const changeFa = (値)=>{
        setFaValue(値)
    }
    戻る (
        <div>
            <h1>Fa の値は {faValue}</h1> です
            <息子 changeFa={changeFa} />
        </div>
    )
}

関数Son(props){
    定数 inputValue = useRef("")
        //faコンポーネントの値を変更する関数を定義します。const changeFaValue = ()=>{
            props.changeFa(入力値の現在の値)
        }
        戻る (
            <>
                <input type="text" placeholder={"変更したい値を入力してください"} ref={inputValue}/>
                <button onClick={changeFaValue}>値を変更</button>
            </>
        )
}
  • イベントバス(サブスクライブ・パブリッシュメカニズム)

これは弱められたリダックスとして理解できます。ここでは、ライブラリ pubsub-js を使用して記述します。書き方は以下の通りです。

// たとえば、前の入力ケースでは、brother コンポーネントに値を渡す必要があります。props を使用しない場合、Bro はどのように記述すればよいでしょうか。
デフォルトクラス Bro をエクスポートして Component を拡張します {

    コンポーネントマウント() {
        this.sonData = PubSub.subscribe("brother",(msg,data)=>{
            console.log("Bro コンポーネントがメッセージを受信しました",data);
        })
    }

    コンポーネントのマウントを解除します(){
        PubSub.unsubscribe(this.sonData)
    }

    与える() {
        戻る (
            <>
                <div>兄弟</div>
            </>
        )
    }
}
息子:
デフォルトのクラスSonをエクスポートしてReact.PureComponentを拡張します{

    変更値 = ()=>{
        PubSub.publish("brother",this.inputRef.value)
    }

    与える() {
        戻る (
            <>
                <input type="text" placeholder={"値を入力してください"} ref={(el)=>{this.inputRef = el}}/>
                <button onClick={this.changeValue}>変更</button>
            </>
        )
    }
}

このメソッドでは、通常 3 つの API が使用されます。最初の API は subscribe で、対応するイベントを公開し、イベントで何を行うかを定義します。 2 番目は publish で、公開されたイベントをサブスクライブし、変更する対応する値を渡します。 3 番目は unsubscribe で、公開をキャンセルしてメモリを最適化するために使用されます。

以上がReactの3大属性の1つであるpropsの使い方を詳しく解説した内容です。Reactの3大属性の1つであるpropsについてさらに詳しく知りたい方は、123WORDPRESS.COMのその他の関連記事もぜひご注目ください!

以下もご興味があるかもしれません:
  • Reactの3つのコア特性の深い理解
  • Reactのref属性を深く理解する方法
  • React の 3 つの主要属性における Ref の使用に関する詳細な説明
  • Reactの3つの主要属性における状態の使用の詳細な説明
  • React の 3 つの主要な特性をご存知ですか?

<<:  MySQL ベースのシーケンス実装方法

>>:  Dockerボリュームマウントの実装方法

推薦する

Dockerイメージの作成、アップロード、プル、デプロイを理解するための記事

目次1. 画像1. 鏡とは何ですか? 2. 画像の構成と目的(1) Dockerファイル(2)スクラ...

MySQL Binlog ログの読み取り時によくある 3 つのエラー

1. mysqlbinlog: [エラー] 不明な変数 'default-character...

SVNサービスバックアップ操作手順の共有

SVN サービスのバックアップ手順1. ソースサーバーとターゲットサーバーを準備するソースサーバー:...

MySQL データベースの 1045 エラーの解決方法

ローカル データベースがサーバー データベースに接続されているときに発生する 1045 の問題を解決...

Tomcat 初回展開 Web プロジェクト プロセス図

独自のWebプロジェクトをtomcatディレクトリの下のwebappsディレクトリに配置します。 R...

VMware を使用して PXE バッチ インストール サーバーをテストする詳細なプロセス

目次1. 準備1. 環境を整える2. インストール方法3. ネットワークカードの構成2. インストー...

完璧なアロエベラジェルを選ぶには?完璧なアロエベラジェルの本物と偽物の見分け方

最新のパーフェクト アロエ ベラ ジェルのパッケージ ボックスには、赤いフォントで完璧な英語の文字が...

Linux の crw、brw、lrw などのファイル属性は何ですか?

ファイルとは何ですか?すべてのファイルは実際には文字列のストリームですが、適切な解析方法を使用すると...

CSS BEM 記述標準の詳細な説明

BEM は、Web 開発に対するコンポーネントベースのアプローチです。ユーザー インターフェイスを独...

opensslを使用して無料の証明書を生成する方法

1: openssl とは何ですか? その機能は何ですか?適用シナリオは何ですか? Baidu 百科...

LinuxサーバーでRabbitMQ管理ページにアクセスできない問題を解決

私のプロジェクトの特定の機能ではサーバーが rabbitmq にメッセージを送信する必要があるため、...

証明書を使用してリモート Docker サーバーに接続する方法

目次1. スクリプトを使用してDockerのTLSを暗号化する2. Dockerの設定を変更してリモ...

Docker コンテナにデプロイされた Django のタイムゾーンの問題

目次Django でのタイムゾーン設定USE_TZ=真USE_TZ=偽Linux コンテナでのタイム...

VirtualBox での CentOS 8.1 仮想マシンのインストールを最小限に抑える詳細なチュートリアル

1. 関連ツールと画像をダウンロードするダウンロードリンクバーチャルボックス: https://do...