Reactはグローバル箇条書きボックスメソッドをカプセル化します

Reactはグローバル箇条書きボックスメソッドをカプセル化します

この記事の例では、Reactカプセル化グローバルポップアップボックスの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

ポップアップ効果図

ファイルレイアウト

インデックス

/* eslint を無効にする react/no-render-return-value */
React をインポートします。{ コンポーネント } を 'react' からインポートします。
'immutable' から { is, fromJS } をインポートします
'react-dom' から ReactDOM をインポートします。
'./alert.less' をインポートします

const close = require('../images/guanbi.png')
定数 line = require('../images/line.png')

定数デフォルト状態 = {
  アラートステータス: false、
  アラートヒント: null、
  アラートタイトル: '詳細',
  クローズアラート: () => {}
}

クラス Toptips は Component を拡張します {
  状態 = {
    ...デフォルト状態
  }

  //cssアニメーションコンポーネントがターゲットコンポーネントに設定されます FirstChild = props => {
    const childrenArray = React.Children.toArray(props.children)
    childrenArray[0]を返す || null
  }

  // ポップアップボックスを閉じる confirm = () => {
    const that = this
    console.log(それ)
    this.setState() は、
      {
        アラートステータス: false
      },
      () => {
        that.state.closeAlert()
      }
    )
  }

  オープン = データ => {
    const オプション = データ || {}
    オプション.alertStatus = true
    this.setState({
      ...デフォルト状態、
      ...オプション
    })
  }

  閉じる = () => {
    const that = this
    that.state.closeAlert()
    this.setState({
      ...デフォルト状態
    })
  }

  コンポーネントの更新 = (次のプロパティ、次の状態) => {
    戻る (
      !is(fromJS(this.props), fromJS(nextProps)) ||
      !is(fromJS(this.state), fromJS(nextState))
    )
  }

  与える() {
    const { alertStatus、alertTip、alertTitle } = this.state
    console.log(アラートヒント、アラートタイトル)
    戻る (
        <div
          クラス名="アラートコン"
          style={alertStatus ? {display: 'block' } : {display: 'none' }}
        >
          <div className="アラートコンテキスト">
            <div className="アラートコンテンツタイトル">{アラートタイトル}</div>
            <img className="alert-content-line" src={line} alt="line" />
            <div className="alert-content-detail">{アラートヒント}</div>
            <画像
              役割="プレゼンテーション"
              クリックすると{() => {
                確認()
              }}
              className="アラートを閉じる"
              src={閉じる}
              alt="閉じる"
            />
          </div>
        </div>
    )
  }
}

定数div = document.createElement('div')
定数プロパティ = {}
ドキュメント本体に子要素を追加します。

const Box = ReactDOM.render(React.createElement(Toptips, props), div)

デフォルトボックスをエクスポート

少ない

.アラート-コン{
  位置: 固定;
  上: 0;
  左: 0;
  幅: 100%;
  高さ: 100%;
  背景: rgba(255, 255, 255, 0.3);
  Zインデックス: 222;
}
.アラートコンテキスト{
  // 背景色: #fff;
  // 境界線の半径: 16px;
  位置: 相対的;
  // 高さ: 500px;
  高さ: 90%;
  幅: 750ピクセル;
  マージン: 40px 自動 0;
  背景: url(../images/alertBJ.png) 繰り返しなし 中央;
  背景サイズ: 100% 100%;
  .アラートを閉じる{
    幅: 30ピクセル;
    高さ: 30px;
    位置: 絶対;
    右: 30px;
    上: 30px;
  }
  .アラートコンテンツタイトル{
    幅: 100%;
    高さ: 80px;
    行の高さ: 80px;
    色: #fff;
    テキスト配置: 中央;
    フォントサイズ: 36px;
    フォントの太さ: 太字;
    // 背景: url(../images/line.png) no-repeat left bottom;
  }
  .アラートコンテンツ行{
    幅: 100%;
    高さ: 20px;
    上マージン: -44px;
    左マージン: -6px;
  }
  .アラート詳細リスト{
    幅: 102%;
    高さ: 100%;
    オーバーフロー-y: 自動;
    パディング: 20px 60px;
    .アラート詳細リストC{
      p{
        &:n番目の子(1){
          フォントサイズ: 14px;
          行の高さ: 20px;
          色: #FFFFFF;
          文字間隔: 1.4px;
        }
        &:n番目の子(2){
          行の高さ: 24px;
          フォントサイズ: 18px;
          色: #FFFFFF;
        }
      }
    }
  }
  .アラートコンテンツの詳細{
    // 高さ: 100%;
    高さ: calc(100% - 100px);
    /* オーバーフロー-y: 自動; */
    オーバーフロー: 非表示;
    幅: 98%;
    上マージン: -26px;
  }
  .アラート詳細-pdf{
    幅: 102%;
    高さ: 100%;
    オーバーフロー-y: 自動;
    パディング: 20px 60px;
    .アラート詳細ボタン{
      ディスプレイ: フレックス;
      flex-direction: 行;
      コンテンツの端揃え: flex-end;
      下マージン: 10px;
      p{
        色:#fff;
        行の高さ: 35px;
        フォントサイズ: 16px;
        右マージン: 20px;
      }
      {
        行の高さ: 35px;
        フォントサイズ: 16px;
        右マージン: 20px;
      }
    }
  }
.cameraWrap{
  幅: 100%;
  高さ: 102%;
  ボックスのサイズ: 境界線ボックス;
  パディング: 12px 4px 0 14px;
}
}

使用法

  • alertTitle ポップアップタイトル
  • alertTip ポップアップ コンテンツ、カスタム スタイル
  • closeAlert は閉じるときに情報を返しますが、これは必要に応じてオプションになります。
「./Toptips」からToptipsをインポートします
トップヒント.open({
      alertTitle: 「コメントの詳細」、
      アラートヒント: that.htms(val),
      クローズアラート: 関数 () {
        console.log("閉じました...");
      }
    });
  htms = val => {
    戻る (<div className="alert-detais-list">
      <div className="アラートの詳細リスト-C">
        <p>コメント内容:</p>
        <p>{val.fdタイトル}</p>
      </div>
      <div className="アラートの詳細リスト-C">
        <p>コメントの詳細:</p>
        <p>{val.fdタイトル}</p>
      </div>
      <div className="アラートの詳細リスト-C">
        <p>測定と結果:</p>
        <p>{val.fdContent}</p>
      </div>
      <div className="アラートの詳細リスト-C">
        <p>進捗状況の詳細:</p>
        <p></p>
      </div>
    </div>)
  }

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

以下もご興味があるかもしれません:
  • Reactはantdフォーム割り当てを使用してポップアップボックスの操作を変更します
  • React Native はプログレスバーポップアップのサンプルコードを実装します

<<:  MySQLの論理アーキテクチャに関する深い理解

>>:  XHTML CSS ページをプリンタ ページに変換する

推薦する

Vue ディレクティブ v-html と v-text

目次1. v-text テキストレンダリング命令2. v-html 1. v-text テキストレン...

Vueのアイデアを使ってストレージをカプセル化する方法

目次背景関数目的アイデアの源成し遂げるセット得るプロパティの削除拡張機能を禁止するもっている要約する...

Docker Composeでコンテナ管理の問題を解決する

Docker の設計では、コンテナは 1 つのアプリケーションのみを実行します。しかし、現在のアプリ...

Linux におけるシステム入出力管理の詳細な説明

システムの入力と出力の管理1. システムの入力と出力を理解するLinuxシステムでは、1は正しい出力...

JS で美しい条件式を書く方法についての簡単な説明

目次複数の条件文複数属性オブジェクトスイッチステートメントを置き換えるデフォルトパラメータとデストラ...

Tomcat マルチポートドメイン名アクセスと gzip 圧縮方式を有効にする構成

1. デフォルトのポート8080に加えて、ドメイン名のアクセスとserver.xmlのオープンにポー...

Ubuntu で時刻同期に NTP を使用する

NTP は、ネットワーク上で時間を同期するための TCP/IP プロトコルです。通常、クライアントは...

すべてのウェブ開発者が知っておくべき61のこと

通常、全員のスピーチを最初から最後まで読む必要があります。ただし、Stack Overflow には...

フロントエンドはJavaScriptを通じてCADグラフィックスの詳細を作成および変更します。

目次1. 現状2. JSでCADグラフィックを作成および変更する2.1 サポートされているCADエン...

Nginx gzip設定について

nginx がリソース圧縮を実現する原理は、ngx_http_gzip_module モジュールを介...

mysql 起動時の ERROR 2003 (HY000) の問題を解決する方法

1. 問題の説明MYSQL を起動すると、図に示すように、「ERROR 2003 (HY000): ...

LinuxサーバーにVueプロジェクトをデプロイする

ケース1 vue-cliはvue3プロジェクトをビルドし、プロジェクトをLinuxサーバーにアップロ...

Reactのコンテキストとプロパティの説明

目次1. 文脈1. 使用シナリオ2. 使用手順3. 結論2. 小道具の詳細1. 子供の財産2. 小道...

Mysql5.7 以降での ONLY_FULL_GROUP_BY エラーの解決方法

最近、開発プロセス中に、プロジェクト開発環境に接続されている MySQL データベースは Aliba...