要件は、製品の評価データを渡すことであり、ページには対応する星の数が表示されます。 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. データに基づいて対応する星の数を計算する // 完全な星の数 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'); } .nullstar { 背景画像: 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CMDコマンドを使用してMySqlデータベースを操作する方法の詳細な説明
>>: MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)
1. mysqlコマンドをインポートするmysql コマンドのインポート構文は次のとおりです。 my...
目次問題の説明Vueの動的コンポーネントとはアプリケーションシナリオの説明実装手順ステップ 1 (新...
私は CentOS に実装された LDAP ユーザー管理を使用しています。これはインターネット上のほ...
環境の準備 Docker環境 MySQL 5.7 (公式イメージはmysql8をサポートしていません...
目次序文始めるReactライフサイクルリアクトファイバーリアクトセットステートReactイベントメカ...
1. Navicat for MySQL 15をダウンロードするhttps://www.navica...
1. Docker psはコンテナをリストします 2. Docker cpはコンテナにファイルをコピ...
1. 表示効果: 2、HTML構造 <div class="プロセスリスト-lpu...
以下の例では、名前が入っている td の幅が 60px のとき、2 行目の文字数が少ない場合は正常に...
目次方法1: 水平スクロールバーを設定する最も簡単な方法方法2(新規):ドラッグバーを追加して外側の...
通常、Web サイトを構築する目的は、検索エンジンにインデックス登録してもらい、プロモーションを拡大...
Dockerは参考までにMySQLバージョン8.0.20をインストールします。具体的な内容は以下のと...
序文これは私が最近見つけた新しい機能です。プロジェクトでの私の使用シナリオは次のとおりです。アプリケ...
仮想マシン内の Ubuntu がネットワークに接続できない場合の効果的な解決策: 1. Ubuntu...
Server-Uソフトウェアの紹介Server-U は非常に強力なファイル マネージャーです。FTP...