Reactの二次連携を実現する方法

Reactの二次連携を実現する方法

この記事では、二次リンクを実現するためのReactの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

実施効果:普通のh5ページ。写真をトリミングし、ユーザー部分を削除しましたが、説明には影響しません。

一般的な考え方は、ページからコンポーネントにデータ インターフェイスを渡すことです。コンポーネントでインタラクションが実行されると、選択されたデータ結果が onTimeChange を通じてページに返され、ページに表示されます。
Taroで書きましたが、構文はreactと同じです。

ミニプログラム効果

かなり昔の方法ですが、実装コードを紹介します。

1. ページ上に時間を選択するためのポップアップウィンドウモジュールがあります

 {this.state.isToggleOn && (
    <パネル
        onTimeChange={this.onTimeChange}
        onClick={this.closeMask}
        list={this.state.timeList} //インターフェースデータ status={this.state.status} //現在の製品ステータス(オプション)/>
   )}

2. ポップアップウィンドウで

"@tarojs/taro" から { コンポーネント } をインポートします。
"@tarojs/components" から View、Text をインポートします。
SendTime を "../time" からインポートします。
「./index.scss」をインポートします。

デフォルトのクラス Panel をエクスポートし、Component を拡張します {
  コンストラクタ(props) {
    スーパー(小道具);
  }

  静的デフォルトプロパティ = {
    リスト: [],
    状態: ""
  };

  クリック() {
    this.properties を onClick() します。
  }

  onTimeChange(日付、時刻) {
    this.props.onTimeChange(日付、時刻);
  }

  与える() {
    戻る (
      <View className="panel-modal">
        <送信時間
          リスト={this.props.list}
          onClick={this.onClick}
          onTimeChange={this.onTimeChange}
          ステータス = {this.props.status}
        />
      </表示>
    );
  }
}

3. 時間要素

"@tarojs/taro" から { コンポーネント } をインポートします。
"@tarojs/components" から View、Text をインポートします。
「../../image」から imageList をインポートします。
「./index.scss」をインポートします。

dateNum = 0 とします。
  時間数 = 0;
エクスポートデフォルトクラス SendTime は Component を拡張します {
  コンストラクタ(props) {
    スーパー(小道具);

    この状態 = {
      日付番号: 日付番号、
      時間番号: 時間番号、
      タイムリスト: [],
    };
  }

  静的デフォルトプロパティ = {
    リスト: [],
  };

  クリック() {
    this.properties を onClick() します。
  }

  switchDay(インデックス、情報) {
    this.setState({
      dateNum: インデックス、
    });
    dateNum = インデックス;
    this.switchTime(timeNum);
    date = info ? info.date : "" とします。
    time = info && info.timeSegementList ? info.timeSegementList[0] : "" とします。
    this.setState({
      タイムリスト: info.timeSegmentList、
    });
    this.onTimeChange(日付、時刻);
  }

  スイッチタイム(インデックス) {
    dateNum = this.state.dateNum; とします。
    this.setState({
      timeNum: インデックス、
    });
    timeNum = インデックス;
    date = this.props.list[dateNum] ? this.props.list[dateNum].date : ""; とします。
    time = this.props.list[dateNum]とします。
      ? this.props.list[日付番号].timeSegementList[インデックス]
      : "";
    (インデックス!= 0)の場合{
      this.onTimeChange(日付、時刻);
    }
  }

  onTimeChange(日付、時刻) {
    this.props.onTimeChange(日付、時刻);
  }

  コンポーネントマウント() {
    this.setState({
      timeList: ["グループが形成された直後に出荷"],
    });
  }

  コンポーネントマウント() {
    if (this.props.status) {
      this.switchDay(dateNum, this.props.list[dateNum]);
    } それ以外 {
      (日付番号 = 0)、(時刻番号 = 0);
      this.setState() は、
        {
          データ番号: 0,
          時間番号: 0,
        },
        () => {
          this.switchDay(0, this.props.list[0]);
        }
      );
    }
  }

  getClassName(インデックス) {
    スイッチ (インデックス) {
      ケース this.state.dateNum:
        「send-data-li current」を返します。
      デフォルト:
        「send-data-li」を返します。
    }
  }

  与える() {
    戻る (
      <表示>
        <View className="send-time-title" onClick={this.onClick}>
          <Text>配達時間</Text>
          <View className="close" />
        </表示>
        <View className="send-time-cont">
          <View className="送信日リスト">
            {this.props.list.map((情報、インデックス) => (
              <表示
                キー={インデックス}
                クラス名={
                  インデックス === this.state.dateNum
                    ? "送信データ-li 現在の"
                    : 「送信データli」
                }
                onClick={this.switchDay.bind(this, index, info)}
              >
                <Text className="txt">{info ? info.date : ""}</Text>
              </表示>
            ))}
          </表示>
          <View className="send-r-time">
            {this.state.timeList.map((情報、インデックス) => (
              <表示
                キー={インデックス}
                クラス名={
                  インデックス === this.state.timeNum
                    ?「send-r-li current」
                    : 「send-r-li」
                }
                onClick={this.switchTime.bind(this, インデックス)}
              >
                <View class="send-r-flex">
                  <Text class="txt">{情報}</Text>
                  <画像
                    className="blue-ok"
                    src={imageList.blueOk}
                    モード={"アスペクトフィット"}
                    遅延読み込み={true}
                  />
                </表示>
              </表示>
            ))}
          </表示>
        </表示>
      </表示>
    );
  }
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Reactは二次連結(左右連結)を実現する
  • Reactは二次的連鎖効果(階段効果)を実現する
  • React+tsは二次リンク効果を実現します

<<:  MySQL監視ツールmysql-monitorの詳細な説明

>>:  Linux rpm および yum コマンドとその使用法の詳細な説明

推薦する

JavaScript インタビュー: 配列の平坦化メソッドを実装する方法

目次1 配列のフラット化とは何ですか? 2 JS標準ライブラリの配列フラット化メソッド3 フラットメ...

Docker プライマリ ネットワーク ポート マッピング構成

ポートマッピングDocker コンテナを起動する前にポート マッピングを行わないと、コンテナ外部のネ...

VueとVueComponentの関係の詳細な説明

次のケースでは、これまでに学んだプロトタイプチェーンの知識ポイントを確認します。 // コンストラク...

JavaScript オブジェクトの組み込みオブジェクト、値型、参照型の説明

目次物体オブジェクト定義オブジェクトのメンバーを反復処理するJS組み込みオブジェクト数学オブジェクト...

MySQL は、元のデータと同じデータがある場合、更新ステートメントを再度実行しますか?

背景この記事では主に、MySQL が更新ステートメントを実行するときに、元のデータと同一の (つまり...

DevUI で独自の Angular コンポーネント ライブラリを構築する方法

目次序文コンポーネントライブラリの作成主要な構成の変更ディレクトリレイアウトの調整ライブラリ構築のた...

Spring jdbc のデータベース操作オブジェクト モデルの詳細な例

Spring jdbc のデータベース操作オブジェクト モデルの詳細な例Spring Jdbc デー...

Centos8.2 クラウド サーバー環境に Tomcat8.5 をインストールするための詳細なチュートリアル

Tomcatをインストールする前に、まずJDK環境をインストールしてくださいLinux サーバー上で...

JavaScript イベント委任 (プロキシ) の使用例の詳細

目次導入例: イベントの委任記述方法1: イベント委譲書き方2: 各子要素がイベントをバインドする例...

Element-ui レイアウト (行と列コンポーネント) の実装

目次基本的な手順と使用方法行コンポーネントの分析レンダリング機能ソースコード分析Col成分の分析コン...

MySQLはイベントを使用してスケジュールされたタスクを完了します

イベントでは、SQL コードを 1 回または一定の間隔で実行することを指定できます。通常、複雑な S...

IE9 のネイティブ ページ互換性の問題に対する解決策についての簡単な説明

序文最近、クライアントのネイティブページを引き継ぎました。顧客は、ページが IE9 以降のバージョン...

大規模なデータテーブルのコピー効率を向上させるMySQLソリューション

序文この記事では主に、MySQL で大規模なデータ テーブルのコピーの効率を向上させることに関する関...

検索データ表示を実装するJavaScript

この記事ではJavaScript検索のデータ表示コードを参考までに共有します。具体的な内容は以下のと...

dockerコンテナにviコマンドをインストールする簡単な操作

docker コンテナを使用する場合、vim がインストールされていないことがあり、vim コマンド...