Reactはいくつかの方法でパラメータを渡します

Reactはいくつかの方法でパラメータを渡します

親コンポーネントと子コンポーネント間でパラメータを渡す

親コンポーネントは値を子コンポーネントに渡します。これはthis.propsを使用して直接実現できます。

親コンポーネントでは、データを渡す必要がある子コンポーネントにカスタムプロパティを追加し、子コンポーネントでは、this.propsを通じて親コンポーネントから渡されたデータを取得できます。

// 親コンポーネントのrender() {
        戻る (
                // 渡す必要のあるメソッドまたはパラメータを渡すにはカスタム属性を使用します <ShopUi toson={this.state}></ShopUi>
            )
    } 

//サブコンポーネント//親コンポーネントから渡されたデータはthis.props.tosonを通じて取得できます

孫コンポーネントに渡す必要がある場合は、子コンポーネントのカスタム属性を介して渡すだけです。

tograndson={this.props.toson}

孫コンポーネントはthis.props.tograndsonを通じてデータを取得します。

子コンポーネントが親コンポーネントに値を渡す場合は、親コンポーネントで受信関数と状態を設定し、関数名を props を通じて子コンポーネントに渡す必要があります。

つまり、親コンポーネントを子コンポーネントに渡し、子コンポーネント内で呼び出す方法である

//GrandsonコンポーネントのエクスポートデフォルトクラスGrandsonはComponentを拡張します{
    与える(){
        戻る (
            <div style={{border: "1px solid red",margin: "10px"}}>
        {このプロパティ名}:
                <onChange を選択={this.props.handleSelect}>
                    <option value="男性">男性</option>
                    <option value="女性">女性</option>
                </選択>
            </div>
        )
    }
};
 
//子コンポーネントのエクスポート デフォルトクラス Child extends Component {
    与える(){
        戻る (
            <div style={{border: "1px solid green",margin: "10px"}}>
                {this.props.name}: <input onChange={this.props.handleVal}/>
                <孫の名前="性別" handleSelect={this.props.handleSelect}/>
            </div>
        )
    }
};
 
//親コンポーネントエクスポートデフォルトクラスParentはComponentを拡張します{
 
    コンストラクタ(props){
        スーパー(小道具)
        this.state={
            ユーザー名: ''、
            性別: ''
        }   
    },
    ハンドルVal(イベント){
        this.setState({ユーザー名: イベントターゲット値});
    },
    ハンドル選択(値) {
        this.setState({性別: イベントターゲット値});
    },
    与える(){
        戻る (
            <div style={{border: "1px solid #000",padding: "10px"}}>
                <div>ユーザー名: {this.state.username}</div>
                <div>ユーザーの性別: {this.state.sex}</div>
                <Child name="名前" handleVal={this.handleVal} handleSelect={this.handleSelect}/>
            </div>
        )
    }
}

少し前に誰かが私にこの質問をしました: コンストラクターでの super() の用途は何ですか?

要約すると:

これをサブクラスのコンストラクターで使用する場合は、親クラスのコンストラクターを呼び出す必要があります。そうしないと、これを取得できません。

問題は、親クラスのコンストラクターをどのように呼び出すかということです。 super() 経由

親コンポーネントからコンストラクターに渡されたパラメーターを使用する場合は、親コンポーネントのスーパーを呼び出すときに、親コンポーネントのコンストラクターにパラメーターを渡す必要があります。

コンストラクターで this またはパラメータを使用しない場合、super は必要ありません。React が既に this と props をバインドしています。

ルーティングパラメータ

インストールnpm install react-router-dom --save-dev

ルートを定義する(通常は外側に配置)

 <ハッシュルーター> 
    <スイッチ> 
        <ルートの正確なパス="/" コンポーネント={Home}/> 
        <ルートの正確なパス="/detail" コンポーネント={Detail}/> 
    </スイッチ> 
</ハッシュルーター> 

ページがジャンプするとき

<li onClick={el => this.props.history.push({
   パス名:'/detail',
     状態:{id:3}
})}
>
</li>

this.props.history.location を通じて渡されたデータを受け取る

ルートパラメータの受け渡しに問題がある可能性があります。つまり、ルートが定義されたときにマウントされたコンポーネントのみが、props 内の位置履歴と一致します。

ルートにマウントされるコンポーネントは通常 Container.js です。通常は UI.js コンポーネントを分離し、クリックしてその中にジャンプします。UI コンポーネントのプロパティには位置履歴の一致はありません。

高レベルコンポーネントwithRouterを使用する必要があります

ステータスの改善

複数のコンポーネントが共有する必要がある状態を、最も近い共通の親コンポーネントに昇格し、親コンポーネントはそれをpropsを通じて子コンポーネントに配布します。

コンテクスト

コンポーネントが独自のコンテキストに状態を保存すると、そのコンポーネントの下にあるすべての子孫コンポーネントは、中間コンポーネントを渡すことなくこの状態にアクセスできますが、このコンポーネントの親コンポーネントはアクセスできません。

クラス Index は Component を拡張します {
  静的な子コンテキストタイプ = {
    テーマカラー: PropTypes.文字列
  }

  コンストラクタ(){
    素晴らしい()
    this.state = { テーマカラー: '赤' }
  }

  子コンテキストを取得する() {
    戻り値: this.state.themeColor }
  }

  与える () {
    戻る (
      <div>
        <ヘッダー />
        <メイン />
      </div>
    )
  }
}

getChildContext() を介してすべての子孫コンポーネントにプロパティを渡すことによってコンテキストを提供するコンポーネントは、コンテキストの宣言と検証として childContextTypes を提供する必要があります。

クラス Title は Component を拡張します {
  静的コンテキストタイプ = {
    テーマカラー: PropTypes.文字列
  }

  与える () {
    戻る (
      <h1 style={{ color: this.context.themeColor }}>タイトル</h1>
    )
  }
}

サブコンポーネントがコンテキスト内のコンテンツを取得する場合、取得する必要がある状態のタイプを宣言して検証するために contextTypes を記述する必要があります。これも必須です。記述しないと、コンテキスト内の状態を取得できません。
Title は文字列である themeColor を取得する必要があるため、contextTypes で宣言します。

reduxの紹介

ReduxはReactに予測可能な状態管理メカニズムを提供します

Reduxはアプリケーション全体の状態をストアに保存し、ストアには状態ツリーが格納されます。

コンポーネントは、他のコンポーネントに直接通知する代わりに、ストアにアクションをディスパッチできます。

他のコンポーネントは、ストア内の状態をサブスクライブすることでビューを更新できます。

React でパラメータを渡すいくつかの方法についての記事はこれで終わりです。React でパラメータを渡すことについてのより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Reactコンポーネント間のパラメータ受け渡し(詳細説明)
  • React onClickにパラメータを渡す問題について話しましょう

<<:  phpstudy をインストールした後に MySQL を起動できない問題に対する完璧なソリューション (元のデータベースを削除する必要はなく、設定を変更する必要もなく、ポートを変更する必要もありません) 直接共存

>>:  CentOS7 から CentOS8 にアップグレードする方法 (詳細な手順)

推薦する

MySQL ユーザー権限管理の実装

1. MySQL の権限の概要MySQL には、権限を制御する 4 つのテーブルがあります。user...

MySql データベースのサブクエリと高度なアプリケーションの簡単な分析

MySql データベースのサブクエリ:サブクエリ: 選択クエリ ステートメント内に別の選択ステートメ...

エラー 1045 (28000): ユーザー ''root''@''localhost'' のアクセスが拒否されました (パスワード使用: YES) 実用的な解決策

昨日はデータベースへの接続に問題はありませんでしたが、今日はデータベースへの接続時にこのエラーが報告...

HTML ページ スタイルの !-- -- の機能は何ですか?

主に低バージョンのブラウザ向け<!-- --> は HTML コメント タグです。上位バ...

Linux gzipコマンドの使用

1. コマンドの紹介gzip (GNU zip) コマンドは、ファイルの圧縮と解凍に使用されます。こ...

LeetCode の SQL 実装 (175. 2 つのテーブルの結合)

[LeetCode] 175.2つのテーブルを結合する表: 人物+-------------+--...

IDEA の Docker プラグインを介して Springboot プロジェクトを公開する方法の詳細なチュートリアル

1. Dockerfileを書く(1)プロジェクト名を右クリックして新しいテキストファイルを作成し、...

CSS3は、大きな円のドット分布と回転効果を実現するためにtransform-originを使用します。

まず、transform-origin 属性を使用する必要があります。transform 属性は必ず...

HTML で余分なテキストを省略記号に変換する方法

HTML で余分なテキストを省略記号として表示したい場合は、いくつかの方法があります。 1行テキスト...

iconfontアイコンライブラリをvueに導入するエレガントな実践記録

目次序文SVGを生成するSVGスプライトの紹介プロジェクトアイコンを取得するプロジェクトのセットアッ...

MySQL Shellの紹介とインストール

目次01 レプリ​​カセットアーキテクチャ02 MySQL Shellの紹介とインストール03 My...

Docker を使用して Microsoft Sql Server を展開するための詳細な手順

目次1 背景2 コンテナを作成する3 SAパスワードを変更する4 mssql のリンク5. コンテナ...

Linux nslookup コマンドの使用方法の詳細な説明

[nslookup とは?] 】 nslookup コマンドは、Linux で非常によく使用されるネ...