Reactスロットの使い方

Reactスロットの使い方

必要

コンポーネントを自分で書きました。コンポーネントを参照するときに、コンポーネント内に内容を記述し、記述した内容をコンポーネント側で認識して制御できるようにしたいです。Vueを使ったことがある生徒なら、すぐにスロットを思い浮かべるはずです。Reactもスロットに対応しています。次に、Reactを使ってスロットに対応したコンポーネントを開発します。

コアアイデア

親コンポーネントから子コンポーネントに渡される 3 つの div は、デフォルトで props を通じて子コンポーネントに渡され、子コンポーネント内の子のレンダリングを制御できるようになります。

コアコード

// 015 'react' から React をインポートし、スロットを使用します。
'react-dom' から ReactDOM をインポートします。
// 親コンポーネントクラス ParentDom は React.Component を拡張します {
    コンストラクタ(props) {
        スーパー(小道具)
        この状態 = {
            聞いたデータ: "ヘッダーデータ",
            footData: "下部データ",
            contentData: 「コンテンツデータ」
        }
    }
    コンポーネントマウント() {
    }

    与える() {
        戻る (
            <div>
                <h1>015スロットの使用</h1>
                <チャイルド ドメイン>
                    <div data-position="heard" >これがヘッダーです</div>
                    <div data-position="content" >これはコンテンツ丨{this.state.contentData}</div>です
                    <div data-position="foot" >これが一番下です</div>
                </ChildDom>
            </div>
        )
    }
}
// 子コンポーネントクラス ChildDom は React.Component を拡張します {        
    コンストラクタ(props) {
        スーパー(小道具)  
    }
    与える() {
        聞かせて、満足して、足で;
        this.props.children.forEach(item =>{
            if(item.props['data-position'] == 'heard'){
                聞いた = 項目
            }そうでない場合、item.props['data-position'] == 'content'){
                コンテンツ = アイテム
            }そうでない場合、item.props['data-position'] == 'foot'){
                足 = アイテム
            }
        })  
        戻る (
            <div> 要素
                <p>私はサブコンポーネントです</p>
               <div className="聞いた">
                   {聞いた}
               </div>
               <div クラス名="コンテンツ">
                   {コンテンツ}
               </div>
               <div className="foot">
                   {足}
               </div>
            </div>
        )
    }
}

エクスポートデフォルト関数(){
    ReactDOM.render() は、
        <親ドメイン />,
        ドキュメント.クエリセレクタ("#example15")
    );
}

表示効果

Reactでスロットを実装する2つの方法

React コンポーネントに記述した内容は props にマウントされるので、これを利用して Vue と同様のスロット機能を実装することができます。

これは最も外側のコードです

React をインポートします。{ コンポーネント } を 'react' からインポートします。
'./NavBar' から NavBar をインポートします
'./NavBar2' から NavBar2 をインポートします

デフォルトクラスAppをエクスポートし、Componentを拡張します。
  与える() {
    戻る (
      <div>
        <ナビゲーションバー>
          <span>ああ</span>
          <strong>bbb</strong>
          <a href="/#" rel="外部 nofollow" rel="外部 nofollow" >ccc</a>
        </ナビゲーションバー>

        <NavBar2 左スロット={<span>aaa</span>}
        センタースロット={<strong>bbb</strong>}
        rightslot={<a href="/#" rel="external nofollow" rel="external nofollow" >ccc</a>}/>
      </div>
    )
  }
}

1. this.props.children[index]を使用する

React をインポートします。{ コンポーネント } を 'react' からインポートします。

'./style.css' をインポートします
デフォルトクラス NavBar をエクスポートして Component を拡張します {
  与える () {
    戻る (
      <div className="ナビゲーションバー">
        <div className="nav-left">
          {this.props.children[0]}
        </div>
        <div className="nav-center">
          {this.props.children[1]}
        </div>
        <div className="nav-right">
          {this.props.children[2]}
        </div>
      </div>
    )
  }
}

2. 直接的な名前を使用する

React をインポートします。{ コンポーネント } を 'react' からインポートします。

'./style.css' をインポートします
デフォルトクラス NavBar をエクスポートして Component を拡張します {
  与える () {
    const {leftslot, centerslot,rightslot} = this.props
    戻る (
      <div className="ナビゲーションバー">
        <div className="nav-left">
          {左スロット}
        </div>
        <div className="nav-center">
          {センタースロット}
        </div>
        <div className="nav-right">
          {右スロット}
        </div>
      </div>
    )
  }
}

React スロットの使い方に関するこの記事はこれで終わりです。React スロットに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Reactコンテキストを使用してvueスロット関数を実装する
  • ReactはVueのスロットに似たプロジェクトプラクティスを実装します

<<:  MySQL 8.0 アップグレード体験

>>:  CSS を使用してデータ ホットスポット効果を実現する方法

推薦する

Ubuntu 18.04 は pyenv、pyenv-virtualenv、virtualenv、Numpy、SciPy、Pillow、Matplotlib をインストールします

1. 現在、Pythonのバージョン管理ツールは数多く存在します。その中でも比較的使いやすいのがPy...

TCP 3 回目のハンドシェイク データ転送プロセス図

RFC793 ドキュメントの SYN フラグを持つプロセス パケットはデータを伝送できません。つま...

レスポンシブウェブデザインを実現するためにIEでCSS3メディアクエリをサポートする

今日の画面解像度は、320 ピクセル (iPhone) ほど小さいものから、2560 ピクセル以上 ...

MySQL で 2 つのセットの交差/差/和を取得する方法

MySQL の一般的なシナリオ: 2 つのデータ セットの交差と差を取得するステップ1. 2つのコレ...

ネイティブJSでマウススライドによる愛の拡散効果を実現

この記事では、マウスをスライドすると愛が広がる js 特殊効果を紹介します。効果は次のとおりです。 ...

Expressプロジェクトファイルディレクトリの説明と詳細な機能の説明

app.js: スタートアップファイル、またはエントリファイルpackage.json: プロジェク...

Mysql マスタースレーブ同期構成の実践の詳細な説明

1. はじめに以前、「MySQL マスター スレーブ同期の原理」という記事を書きました。この記事を読...

Windows システムでの MySQL 8.0.21 インストール チュートリアル (図とテキスト)

インストールの提案: インストールには .exe を使用せず、圧縮パッケージを使用してください。これ...

CSS3で背景画像にカラーマスクを追加する方法

以前、開発中に背景レイヤーにカラーマスクを追加する必要のあるプロジェクトに遭遇しました。ここでは、背...

HTML の表の行と列を結合する問題の解決策の詳細な説明

私たちが構築しようとしていたウェブサイトには、長い文章だけでなく、多数の表も含まれており、表のレイア...

フロントエンド例外 502 不正なゲートウェイの原因と解決策

目次502 不正なゲートウェイ エラーの発生1. 502 不正なゲートウェイ エラーとは何ですか? ...

Facebookの情報アーキテクチャの分析

<br />原文: http://uicom.net/blog/?p=762 Faceb...

vue+element-uiはヘッドナビゲーションバーコンポーネントを実装します

この記事では、vue+element-uiでヘッドナビゲーションバーコンポーネントを実装するための具...

MySQLの詳細な説明Explain

日常業務では、実行に時間のかかる SQL ステートメントを記録するために、スロー クエリを実行するこ...

Centos7.3 Nginx をインストールして展開し、https を設定する方法

設置環境1. gccのインストールnginxをインストールするには、まず公式サイトからダウンロードし...