React星星評分組件的實現(xiàn)
實現(xiàn)的需求為傳入對商品的評分數(shù)據(jù),頁面顯示對應的星星個數(shù)。
1. 準備三張對應不同評分的星星圖片
2. 期望實現(xiàn)的效果
這樣的
調(diào)用
<StarScore score={data.wm_poi_score}/>
3. 對傳入的數(shù)據(jù)進行處理
我們需要得到評分的整數(shù)和小數(shù)部分
let wm_poi_score = this.props.score || ''; let score = wm_poi_score.toString(); let scoreArray = score.split('.');
如果傳入 4.7 ,那么得到的 scoreArray 就是['4', '7']
4. 根據(jù)數(shù)據(jù)計算對應的星星個數(shù)
// 滿星個數(shù) let fullstar = parseInt(scoreArray[0]); // 半星個數(shù) let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0; // 灰色星個數(shù) let nullstar = 5 - fullstar - halfstar;
5. 根據(jù)星星個數(shù),渲染組件
let starjsx = []; // 渲染滿星 for (let i = 0; i < fullstar; i++) { starjsx.push(<div key={i + 'full'} className="star fullstar"></div>) } // 渲染半星 if (halfstar) { for (let j = 0; j < halfstar; j++) { starjsx.push(<div key={j + 'half'} className="star halfstar"></div>) } } // 渲染灰色星 if (nullstar) { for (let k = 0; k < nullstar; k++) { starjsx.push(<div key={k + 'null'} className="star nullstar"></div>) } }
ok,我們想要的效果就實現(xiàn)啦
6. 手動評分
頁面初次展示時,渲染 5 個灰色的星星。為每一個星星添加一個 click 事件。當點擊之時,獲取該星星所對應的下標 index,為其添加高亮的樣式。
<div className="star-area"> {this.renderStar()} </div>
doEva(i) { this.setState({ startIndex: i + 1 }); } renderStar() { let array = [] for (let i = 0; i < 5; i++) { let cls = i >= this.state.startIndex ? "star-item" : "star-item light" array.push( <div onClick={() => this.doEva(i)} key={i} className={cls}></div> ) } return array }
完整代碼
import React from 'react'; import './StarScore.scss'; // 渲染5顆星得分方法 class StarScore extends React.Component { renderScore() { let wm_poi_score = this.props.score || ''; let score = wm_poi_score.toString(); let scoreArray = score.split('.'); // 滿星個數(shù) let fullstar = parseInt(scoreArray[0]); // 半星個數(shù) let halfstar = parseInt(scoreArray[1]) >= 5 ? 1 : 0; // 灰色星個數(shù) let nullstar = 5 - fullstar - halfstar; let starjsx = []; // 渲染滿星 for (let i = 0; i < fullstar; i++) { starjsx.push(<div key={i + 'full'} className="star fullstar"></div>) } // 渲染半星 if (halfstar) { for (let j = 0; j < halfstar; j++) { starjsx.push(<div key={j + 'half'} className="star halfstar"></div>) } } // 渲染灰色星 if (nullstar) { for (let k = 0; k < nullstar; k++) { starjsx.push(<div key={k + 'null'} className="star nullstar"></div>) } } return starjsx; } render() { return <div className="star-score">{this.renderScore()}</div>; } } export default StarScore;
StarScore.scss
.star-score { .star { width: 10px; height: 10px; float: left; background-size: cover; } .fullstar { background-image: url('./img/fullstar.png'); } .halfstar { background-image: url('./img/halfstar.png'); } .nullstar { background-image: url('./img/gray-star.png'); } }
import './Main.scss'; import React from 'react'; class Main extends React.Component { constructor(props) { super(props); } } /** * 點擊評分 */ doEva(i) { this.setState({ startIndex: i + 1 }); } /** * 渲染評分用的星 */ renderStar() { let array = [] for (let i = 0; i < 5; i++) { let cls = i >= this.state.startIndex ? "star-item" : "star-item light" array.push( <div onClick={() => this.doEva(i)} key={i} className={cls}></div> ) } return array } render() { return ( <div className="content"> <div className="star-area"> {this.renderStar()} </div> </div> ); } } export default Main;
.content { height: 100%; .eva-content { background-color: #fff; overflow: hidden; margin: px2rem(10px); margin-top: px2rem(74px); } .star-area { text-align: center; margin-top: px2rem(30px); } .star-item { width: px2rem(32px); height: px2rem(32px); background-image: url('./img/gray-star.png'); background-size: cover; display: inline-block; margin-right: px2rem(10px); &.light { background-image: url('./img/light-star.png'); } } }
到此這篇關于React星星評分組件的實現(xiàn)的文章就介紹到這了,更多相關React星星評分內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
react router4+redux實現(xiàn)路由權限控制的方法
本篇文章主要介紹了react router4+redux實現(xiàn)路由權限控制的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05React Native之prop-types進行屬性確認詳解
本篇文章主要介紹了React Native之prop-types進行屬性確認詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12react-redux及redux狀態(tài)管理工具使用詳解
Redux是為javascript應用程序提供一個狀態(tài)管理工具集中的管理react中多個組件的狀態(tài)redux是專門作狀態(tài)管理的js庫(不是react插件庫可以用在其他js框架中例如vue,但是基本用在react中),這篇文章主要介紹了react-redux及redux狀態(tài)管理工具使用詳解,需要的朋友可以參考下2023-01-01React報錯之Parameter event implicitly has a
這篇文章主要為大家介紹了React報錯之Parameter event implicitly has an any type,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08