Reactは二次連結(左右連結)を実現する

Reactは二次連結(左右連結)を実現する

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

jsコード

'react' から { コンポーネント } をインポートします
'./linkage.less' をインポートします

クラス Linkage は Component を拡張します {
    コンストラクタ(...引数) {
        super(...引数)

        // 左側を追加します this.FnButtonList = []
        //右側を追加します this.FnContentList = []
        // this.ScrollBys = true に切り替える
        // コンストラクター内で直接実行 --> React は更新されたときにのみレンダリングされます --> componentDidMount は this.init() の取得をトリガーします

    }
    初期化() {
        this.FnSetButton(20)
        // 右側にレンダリング this.FnSetContent(20)
        この状態 = {
            ボタンリスト: this.FnButtonList、
            コンテンツリスト: this.FnContentList、
            //下付きボタンリストインデックス: 0,
        }


    }
    コンポーネントマウント() {
        this.EveryHeight = this.refs['linkage-button-list'].children[0].offsetHeight
    }
    // 乱数 FnSetRandom(m, n) {
        parseInt(Math.random() * (m - n) + n) を返します。
    }
    // 左側のボタンをレンダリングする FnSetButton(n) {
        (var i = 0; i < n; i++) の場合 {
            this.FnButtonList.push({
                id: `ボタン${i}`,
                テキスト: `ボタン${i}`
            })
        }
    }

    // 正しいコンテンツをレンダリングする FnSetContent(n) {
        let ContTop = 0; //最初の要素とページの上部の間の距離 let Random = this.FnSetRandom(750, 1400)
        (i = 0; i < n; i++ とします) {
            this.FnContentList.push({
                高さ: ランダム、
                id: `content${i}`,
                テキスト: `content${i}`,
                トップ: ContTop、
            });
            ContTop += ランダム;
        }
    }

    Fncurrn(インデックス) {
        (インデックス>3)の場合{
            this.refs["linkage-button"].scrollTop = (index - 3) * this.EveryHeight;

        }
        (インデックス<= 3)の場合{
            this.refs["linkage-button"].scrollTop = 0;
        }
    }
    // クリック FnButtonTab(index) {
        this.ScrollBys = false
        this.setState({
            ボタンリストインデックス: インデックス
        })
        this.refs["linkage-content"].scrollTop = this.state.ContentList[index].top;

        //クリックして中央に配置 this.Fncurrn(index)
    }

    //右側と左側をスクロールする FnScroll(ev) {
        this.ContTop = ev.target.scrollTop
        if (this.ScrollBys) {
            n = 0とする

            (i = 0 とします; i < this.state.ContentList.length; i++) {
                もし (
                    this.refs["linkage-content"].scrollTop >= this.state.ContentList[i].top
                ){
                    //ボックスのスクロール距離が右側のボックス内の要素とページの上部の間の距離よりも大きい場合、n = i;
                }
            }
            this.setState({
                ボタンリストインデックス: n
            })

            (Math.abs(n - this.state.ButtonListIndex) === 1)の場合{

                this.setState({
                    ボタンリストインデックス: n
                })
                //中央までスクロールします this.Fncurrn(n)

            }
        }


        this.ContTop == this.state.ContentList[this.state.ButtonListIndex].top) の場合 {
            this.ScrollBys = true
        }

    }

    与える() {
        戻る (
            <div className="リンク">
                <div className="リンクボタン" ref="リンクボタン">
                    <div className="リンクボタンリスト" ref="リンクボタンリスト">
                        {this.state.ButtonList.map((item, index) => <div
                            キー={アイテムID}
                            className={this.state.ButtonListIndex == index ? 'linkage-button-item ac' : 'linkage-button-item'}
                            onClick={this.FnButtonTab.bind(this, インデックス)}
                        >
                            {アイテムテキスト}
                        </div>)}
                    </div>
                </div>
                <div className="link-content" ref="link-content" onScroll={this.FnScroll.bind(this)}>
                    <div className="リンクコンテンツリスト">
                        {this.state.ContentList.map((item) => <div
                            className="リンクコンテンツ項目"
                            キー={アイテムID}
                            スタイル={{ 高さ: item.height + 'px' }}
                        >
                            <div className="linkage-content-title"> {item.text}</div>
                        </div>)}
                    </div>
                </div>
            </div>
        )
    }
}
デフォルトのリンクをエクスポート

cssファイル

体 {
    マージン: 0;
  }
  .linkage {
    幅:100vw;
    高さ:100vh;
    ディスプレイ: フレックス;
    .linkage-button {
      幅: 20vw;
      高さ:100vh;
      背景:チョコレート;
      テキスト配置: 中央;
      フォントサイズ: 40px;
      色: #fff;
      オーバーフロー: スクロール;
      スクロール動作: スムーズ;
      .linkage-button-list {
        幅: 20vw;
        .linkage-button-item.ac {
          背景: 水色;
        }
        .linkage-button-item {
          幅: 20vw;
          高さ: 10vh;
          行の高さ: 10vh;
        }
      }
    }
    .linkage-content {
      幅:80vw;
      高さ:100vh;
      スクロール動作: スムーズ;
      オーバーフロー: スクロール;
      .linkage-content-list {
        .linkage-content-item {
          幅:80vw;
          高さ:100vh;
          .linkage-content-title {
            高さ: 6vh;
            行の高さ: 6vh;
            幅:80vw;
            テキスト配置: 中央;
            背景:シャルトリューズ;
            色: #fff;
            フォントサイズ: 30px;
          }
        }
      }
    }
  }
  .linkage-button::-webkit-scrollbar {
    display: none; /* Chrome Safari */
  }
  .linkage-content::-webkit-scrollbar {
    display: none; /* Chrome Safari */
  }

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

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

<<:  Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)

>>:  Dockerコンテナにnginxを簡単にデプロイするプロセスの分析

推薦する

Msyql トランザクション分離について知っておくべきこと

トランザクションとは何ですか?トランザクションは、データベース管理システムの実行プロセスにおける論理...

DockerはホストのMysql操作に接続します

今日、会社のプロジェクトでは docker を設定する必要があります。Windows に正常にインス...

CSS 命名: BEM、スコープ付き CSS、CSS モジュール、CSS-in-JS の説明

CSS の適用範囲はグローバルです。プロジェクトがどんどん大きくなり、参加する人が増えるにつれて、命...

dockerを使用してdubboプロジェクトをデプロイする方法

1. まず、Springbootを使用して簡単なDubboテストプログラムを構築し、関連する依存関係...

JavaScriptの厳密モードが8進数をサポートしていない問題の説明

JavaScript厳密モードが 8 進数をサポートしていないという問題に関して、まず、 Java...

docker compose を使用して fastDFS ファイル サーバーを構築する方法

前回の記事では、docker compose を使用して FastDfs ファイル サーバーをインス...

ミニマルなウェブサイトデザインの例

Web アプリケーション クラス1. みんなのためにダウンまたは私だけのためにこのウェブサイトは、ウ...

JS のあらゆる場所で絶対等価演算子の使用をやめる

目次概要1. NULL値のテスト2. ユーザー入力を読み取る導入事実の根源はどこにあるのでしょうか?...

フォームファイル選択ボックスのスタイルをカスタマイズする例

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

Linux 環境変数の設定方法のまとめ (.bash_profile と .bashrc の違い)

Linux では、アプリケーションをダウンロードしてインストールすると、起動時にアプリケーション名...

JavaScript を使用してハイパーリンクのリダイレクトを防ぐ方法 (複数の書き方)

JavaScript を使用すると、ハイパーリンクがジャンプするのを防ぐことができます。方法は次の...

Easyswoole ワンクリック インストール スクリプトとパゴダ インストール エラー

よくある質問easyswoole を初めて使用する場合は、次のような問題に遭遇することがよくあります...

ウェブページの背景画像を伸ばす2つの方法

解決策は2つあります。 1つはCSSで、background-size:coverを使用して画像の伸...

Windows で削除された MySQL 8.0.17 のルート アカウントとパスワードを回復する方法

少し前にSQLの独学を終え、MySQL 8.0.17をダウンロードしました。インストールして設定した...

非常に優れた CSS スキル 10 選のコレクションと共有

ここでは、CSS テクニックを巧みに使用することで、HTML を変更せずにブログやテンプレートの外観...