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

推薦する

React Native が「NSArray<id<RCTBridgeModule>>型のパラメータを初期化できません」というエラーを報告する (解決方法)

最近、古い RN プロジェクトを Xcode で実行すると、次のコード エラーが報告されました。 &...

Vueはvue-quill-editorリッチテキストエディタを使用し、画像をサーバーにアップロードします。

目次1. 準備2. グローバルコンポーネント quill-editor を定義する1. テンプレート...

MySQL 8.0 オンライン DDL クイック列追加の概要

目次問題の説明MySQLオンラインDDLで列を追加する従来の方法01 コピー方法02 インプレースメ...

マルチコア CPU を使用して Linux コマンドを高速化する方法 (GNU Parallel)

非常に大量のデータ(数百 GB)を計算する必要があったことはありますか?または、その内部を検索したり...

HTML における src と href の違いについての簡単な説明

簡単に言うと、srcは「このリソースをロードしたい」という意味で、hrefは「このリソースに関連付け...

Linux での MySQL 5.7.19 のインストールに関する問題の概要

初めて仮想マシンに MySQL をインストールしたとき、多くの問題が発生しました。ここでそれらを書き...

3つのDocker Nginxログの処理の詳細な説明

社内の同僚は Nginx ログの標準出力、つまりコンソール経由の処理を必要としているため、まずログを...

Iframe Web ページのナビゲーション ウィンドウに関する簡単な説明

Iframe Web ページのナビゲーション ウィンドウに関する簡単な説明 Iframe ウェブペー...

Linuxでホスト名を永続的に変更する方法

ホスト名を変更する場合は、以下の手順に従ってください。ホスト名の使用hostnameコマンドを使用す...

CentOS7でFTPサーバーを設定する方法

FTP は主にファイル転送に使用され、Linux では vsftpd で実装されるのが一般的です。F...

JavaScript で支払いの 10 秒カウントダウンを実現

この記事では、支払いの10秒カウントダウンを実現するためのJavaScriptの具体的なコードを参考...

HTML でスクロールバーを非表示にしたり削除したりする方法

1. 属性付きHTMLタグXML/HTML コードコンテンツをクリップボードにコピー< htm...

フレームセットの高さを設定する際のインターフェース変形の解決策

現在、プロジェクトを作成しました。インターフェースは次のとおりです。これはフレームセットを使用して行...

CSS で 2 つの固定列と 1 つの適応列を実装するいくつかの方法

この記事では、CSS で 2 つの固定列と 1 つのアダプティブ列を実装するいくつかの方法を紹介し、...

IE6 で幅と高さがおかしいバグ

図に示すように: しかし、IE6で表示すると、right:1px:になります。 IE6 には、幅と高...