美文网首页
React如何实现五星评分/共5分

React如何实现五星评分/共5分

作者: 不不作为 | 来源:发表于2020-01-13 15:13 被阅读0次

    一: 含半星的评分渲染

    在DOM中  调用setStar方法进行渲染
    
     <div>
                          {List_src.score?
                            this.setStar(List_src.score) : ''  //这里List_src.score 为后台传过来的评分数
                          }
     </div>
    

    在setStar函数中书写逻辑

     setStar(v){
        let num = Math.floor(v*2)/2; //把后台传过来的分数向下取值 获得整数,以防出错
        let array=[] ; //通过array数组中的[0,1,2] 来条件渲染星星组件
        for(let i=0; i<Math.floor(num);i++){  // 后台传几分,这里就渲染几个亮星
          array.push(1) //亮星用数字 1 表示
        }
        if(num%1!==0){
          array.push(2) //半星用数字 2 表示
        }
        if(array.length<5){ //如果数组长度小于5 那么就多渲染多少个
          for(let i=0;i<(5-array.length);i++){
            array.push(0) // 灰星用 3 表示
          }
        }
        return(
          <div>
            {
              array.map((item,index)=>{  //条件渲染  star 1 : 亮星   star2:半星 star1 : 灰星
                return (
                  <img key={index} src={item=='1'? star : item=='2' ? star2 : item=='0'? star1 : ''} alt=""/>
                )
              })
            }
          </div>
        )
      }
    

    二:不含半星的评分渲染

    这个功能就简单许多 与上面半星渲染逻辑差不多

     setStar(v){
        let num = v.toString().substring(0, 1); // 3
        let array=[ ] ; //通过array数组中的[0,1,2] 来条件渲染星星组件
        for (let i =1 ; i<5 ; i++){
          if(i<num){
          array.push(1)
          }else{
            array.push(0)
          }
    }
        return(
          <div>
            {
              array.map((item,index)=>{  //条件渲染  star 1 : 亮星  star:灰星
                return (
                  <img key={index} src={item=='1'? star1 : star} alt=""/>
                )
              })
            }
          </div>
        )
      }
    

    三:具有评价功能的星星组件

    效果如图:
    评价.gif

    用的方式比较古老死板,但是这个页面一般不会去做大的修改,因此没必要大费周章,也是因为技术有限
    现在state属性里定义需要的属性

     constructor(props){
        super(props);
    this.state={
      text:'请评价',  //点击后显示的文本内容 : 0个星=>'请评价'  1-3个星:'不满意' 4个星:'满意 '  5个星 : '超满意'
     sorce:'',//评分  需要给后台传的分数
    arr:[0,0,0,0,0] //默认0 为灰色星星
    }
    

    接下来就是逻辑

    <div>
                {
                  arr.map((item,index)=>{
                    return (
                      <div key={index} onClick={()=>{
                        index ==0 ? this.setState({text:'不满意',arr:[1,0,0,0,0],sorce:1}) : ''
                        index ==1 ? this.setState({text:'不满意',arr:[1,1,0,0,0],sorce:2}) : ''
                        index ==2 ? this.setState({text:'不满意',arr:[1,1,1,0,0],sorce:3}) : ''
                        index ==3 ? this.setState({text:'满意'  ,arr:[1,1,1,1,0],sorce:4}) : ''
                        index ==4 ? this.setState({text:'超满意',arr:[1,1,1,1,1],sorce:5}) : ''
                      }}>
                        <img style={{width:'.61rem',height:".59rem",marginRight:'.1rem'}} src={item==1? star2 : star1} alt=""/>
                      </div>
                    )
                  })
                }
    
              </div>
            <p className={style.status}>
              {this.state.text}
            </p>
    

    本文完 欢迎大佬指导.

    相关文章

      网友评论

          本文标题:React如何实现五星评分/共5分

          本文链接:https://www.haomeiwen.com/subject/timgactx.html