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ボリュームマウントの実装方法

推薦する

MySQLクエリの基本的なクエリ操作の学習

序文MySQL は最も人気のあるリレーショナル データベース管理システムです。WEB アプリケーショ...

Docker で Elasticsearch Kibana と ik Word Segender をデプロイする詳細な説明

esインストール docker pull elasticsearch:7.4.0 # -d : バッ...

VUEプロジェクトでXSS攻撃に遭遇した実体験

目次序文原因を発見するカスタムフィルタリングルール要約する序文インターネットの急速な発展に伴い、情報...

VMware 仮想マシンのインストール win7 オペレーティング システム チュートリアル ダイアグラム

VMwareaのインストールプロセスは説明しませんが、主にwin7イメージをロードする方法を説明しま...

クリック範囲を拡大する入力チェックボックスを実装する方法

XML/HTML コードコンテンツをクリップボードにコピー< div style = &quo...

MySQL の分離レベル、ロック、MVCC の紹介

この記事の目的は、これらの概念とその機能の関係を明らかにすることです。 Mysql がトランザクショ...

Nginx プロキシ axios リクエストと注意事項

序文最近、小さなデモを作成しました。大規模な工場のオンライン データを使用したため、インターフェイス...

Vueがビデオアップロード機能を実装

この記事では、参考までに、ビデオアップロード機能を実現するためのVueの具体的なコードを紹介します。...

MySQL タイムブラインドインジェクションの 5 つの遅延方法

MySQL タイム ブラインド インジェクションの 5 つの遅延方法 (PWNHUB の予期しない解...

組み込みオブジェクトに関するJavascriptの基礎

目次1. 組み込みオブジェクトの紹介1.1 数学オブジェクト1.2 数学における方法1.3 日付オブ...

HTML ページをスクロールするときに一部のコンテンツを固定位置に固定する方法

この記事では主に、レイアウトに役立つ、HTML ページ内の一部のコンテンツを固定してスクロール時にス...

適応幅(パーセンテージ)に応じて Div の高さを調整する純粋な CSS

今日のレスポンシブ レイアウトの要件では、サイズを自動的に調整できる多くの要素で高さと幅の適応を実現...

HTML CSS3は画像表示効果を引き伸ばさない

1. transform 属性を使用して、画像を拡大せずに表示します (パスの問題は必要に応じて修正...

ウェブデザイナーが持つべき7つのスキル

Web デザインは科学であると同時に芸術でもあります。 Web デザイン作業は、半分は適切なプログラ...

例によるMySql CURRENT_TIMESTAMP関数の分析

時間フィールドを作成するときデフォルトのCURRENT_TIMESTAMPデータを挿入する際、このフ...