React 星評価コンポーネントの実装

React 星評価コンポーネントの実装

要件は、製品の評価データを渡すことであり、ページには対応する星の数が表示されます。

1. 異なる評価に対応する3つの星の写真を用意する

ここに画像の説明を挿入
ここに画像の説明を挿入ここに画像の説明を挿入

2. 期待される結果

そのような

ここに画像の説明を挿入

電話

<StarScore スコア={data.wm_poi_score}/>

3. 受信したデータを処理する

スコアの整数部分と小数部分を取得する必要があります

wm_poi_score を this.props.score || とします。
スコアをwm_poi_score.toString()とします。
scoreArray = score.split('.'); とします。

4.7が渡された場合、結果のスコア配列は['4', '7']になります。

4. データに基づいて対応する星の数を計算する

// 完全な星の数 let fullstar = parseInt(scoreArray[0]);
// 半分の星の数 let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0;
// 灰色の星の数 let nullstar = 5 - fullstar - halfstar;

5. 星の数に応じてコンポーネントをレンダリングする

starjsx = [] とします。
// 完全な星をレンダリングする for (let i = 0; i < fullstar; i++) {
  starjsx.push(<div key={i + 'full'} className="star fullstar"></div>)
}
// 半分の星をレンダリングする if (halfstar) {
  (j = 0; j < ハーフスター; j++) の場合 {
    starjsx.push(<div key={j + 'half'} className="star halfstar"></div>)
  }
}
// 灰色の星をレンダリングします if (nullstar) {
  (k = 0; k < nullstar; k++ とします) {
    starjsx.push(<div key={k + 'null'} className="star nullstar"></div>)
  }
}

はい、望んでいた効果が達成されました。

6. 手動スコアリング

ここに画像の説明を挿入

ページが最初に表示されるときに、5 つの灰色の星が表示されます。各星にクリック イベントを追加します。クリックすると、星に対応する下付き文字インデックスが取得され、それにハイライト スタイルが追加されます。

<div className="スターエリア">
  {this.renderStar()}
</div>
doEva(i) {
  this.setState({
    開始インデックス: i + 1
  });
}

レンダースター() {
  配列 = [] とする
  (i = 0; i < 5; i++ とします) {
    cls = i >= this.state.startIndex ? "スターアイテム" : "スターアイテム ライト" とします
    配列.push(
      <div onClick={() => this.doEva(i)} キー={i} クラス名={cls}></div>
    )
  }
  配列を返す
}

完全なコード

'react' から React をインポートします。
'./StarScore.scss' をインポートします。

// 5つ星スコアメソッドをレンダリングする class StarScore extends React.Component {
  レンダリングスコア() {
    wm_poi_score を this.props.score || とします。
    スコアをwm_poi_score.toString()とします。
    scoreArray = score.split('.'); とします。
    // 完全な星の数 let fullstar = parseInt(scoreArray[0]);
    // 半分の星の数 let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0;
    // 灰色の星の数 let nullstar = 5 - fullstar - halfstar;
    starjsx = [] とします。

    // 完全な星をレンダリングする for (let i = 0; i < fullstar; i++) {
      starjsx.push(<div key={i + 'full'} className="star fullstar"></div>)
    }
    // 半分の星をレンダリングする if (halfstar) {
      (j = 0; j < ハーフスター; j++) の場合 {
        starjsx.push(<div key={j + 'half'} className="star halfstar"></div>)
      }
    }
    // 灰色の星をレンダリングします if (nullstar) {
      (k = 0; k < nullstar; k++ とします) {
        starjsx.push(<div key={k + 'null'} className="star nullstar"></div>)
      }
    }
    starjsx を返します。
  }
  与える() {
    <div className="star-score">{this.renderScore()}</div> を返します。
  }
}

デフォルトの StarScore をエクスポートします。

スタースコア.scss

.星スコア {
  。星 {
    幅: 10px;
    高さ: 10px;
    フロート: 左;
    背景サイズ: カバー;
  }

  .fullstar {
    背景画像: url('./img/fullstar.png');
  }

  .ハーフスター{
    背景画像: url('./img/halfstar.png');
  }

  .nu​​llstar {
    背景画像: url('./img/gray-star.png');
  }
}
'./Main.scss' をインポートします。
'react' から React をインポートします。

クラスMainはReact.Componentを拡張します。
  コンストラクタ(props) {
    スーパー(小道具);
    }
  }
  
  /**
   * クリックして評価してください */
  実行Eva(i) {
    this.setState({
      開始インデックス: i + 1
    });
  }
  /**
   * レンダリング評価の星 */
  レンダースター() {
    配列 = [] とする
    (i = 0; i < 5; i++ とします) {
      cls = i >= this.state.startIndex ? "スターアイテム" : "スターアイテム ライト" とします
      配列.push(
        <div onClick={() => this.doEva(i)} キー={i} クラス名={cls}></div>
      )
    }
    配列を返す
  }
  与える() {
    戻る (
      <div クラス名="コンテンツ">
        <div className="スターエリア">
            {this.renderStar()}
          </div>
      </div>
    );
  }
}

デフォルトのメインをエクスポートします。
。コンテンツ {
  高さ: 100%;
  .eva-コンテンツ{
    背景色: #fff;
    オーバーフロー: 非表示;
    マージン: px2rem(10px);
    上マージン: px2rem(74px);
  }
  .star-area {
    テキスト配置: 中央;
    上マージン: px2rem(30px);
  }
  .スターアイテム{
    幅: px2rem(32px);
    高さ: px2rem(32px);
    背景画像: url('./img/gray-star.png');
    背景サイズ: カバー;
    表示: インラインブロック;
    右マージン: px2rem(10px);

    &。ライト {
      背景画像: url('./img/light-star.png');
    }
  }
}

React 星評価コンポーネントの実装に関するこの記事はこれで終わりです。React 星評価の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • React は antd のアップロード コンポーネントを使用してファイル フォーム送信機能を実装します (完全なコード)
  • React 純粋関数コンポーネント setState がページ更新を更新しない問題の解決方法
  • Reactは動的ポップアップウィンドウコンポーネントを実装します
  • Reactコンポーネントをフルスクリーンにする方法

<<:  CMDコマンドを使用してMySqlデータベースを操作する方法の詳細な説明

>>:  MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)

推薦する

主軸上のFlex子要素の比率を制御する方法

背景フレックス レイアウトにより、配置とスペースの割り当てがより効果的に実現されます。最近、flex...

HTML タグ tbody の使い方と説明

tbody 要素は、thead 要素および tfoot 要素と組み合わせて使用​​する必要があります...

mysql.data.dll ドライバーのさまざまなバージョンの簡単な分析

ここにmysqlドライバmysql.data.dllがあります知らせ:ここではX86バージョンが多く...

JSはUUIDとNanoIDというユニークなIDメソッドを生成します

目次1. NanoIDがUUIDに取って代わる理由2. jsを生成する方法3. ナノID方式序文:ユ...

CSS background-blend-modeの仕組みを深く理解する

この記事は共有および集約することを歓迎します。全文を転載する必要はありません。著作権を尊重してくださ...

さまざまな種類のMySQLインデックス

インデックスとは何ですか?インデックスは、データベース ストレージ エンジンが指定されたデータをすば...

一般的なDocker Composeコマンドの詳細な説明

1. Docker Compose の使用方法は docker コマンドの使用方法と非常に似ています...

MySQLで偽または真を保存する方法

MySQL ブール値、偽または真を格納つまり、データベースに保存されるブール値は 0 と 1 であり...

1つの記事でTypeScriptのデータ型について学ぶ

目次基本タイプあらゆるタイプ配列タプルインタフェース関数自己推論を入力する結合タイプ(1つ以上選択)...

JavaScript ループトラバーサルの 24 種類のメソッドをすべてご存知ですか?

目次序文1. 配列走査法1. 各() 2. マップ() 3. 〜のために4. フィルター() 5. ...

Docker を使用して pypi プライベート リポジトリを構築する方法

1. 建設1. htpasswd.txtファイルを準備するファイルには、パッケージを倉庫にアップロー...

画像を使用してハイパーリンクのパーソナライズされた下線を実現します

画像内に下線付きのリンクが表示されても驚かないでください。実はとても簡単なので、あなたにもできるので...

自己終了XHTMLタグを書くときに注意すべきこと

XHTMLの img タグは、次のように記述する必要があります: <img alt="...

バックエンドから返される 100,000 個のデータをフロントエンドでより適切に表示するにはどうすればよいですか?

目次予備作業バックエンド構築フロントエンドページダイレクトレンダリングsetTimeout ページン...

Linux でバックグラウンドで実行中のプログラムを表示して終了する方法

1. .shファイルを実行する./sh ファイルを使用して直接実行することもできますが、現在のターミ...