一个基于rax的评分组件
来源:互联网 发布:招商银行外汇交易软件 编辑:程序博客网 时间:2024/06/13 00:05
最近再做一个类似商城系统的项目,做到一个评价模块的时候需要用到一个类似五星好评的功能,
看了一下我们用的组件库(Nuke)发现暂时还没有类似的组件,所以就自己动手简单的实现了一个
效果差不多就是这样的:
核心的思路就是在点击五角星的时候将选中的五角星个数存到state中,然后在render()的时候在根据这个state来渲染出对应个数的黄色五角星,以及剩余的灰色五角星。
基本的实现比较简单就直接贴代码了;
rate(index){ if(this.state.star == 0 && index == 0){ //在一星的时候通过点击一星将选中变为0 this.setState({ star:-1 }) }else{ this.setState({ star:index }) } } render() { const { arr } = this.state; let star = []; if(arr){ star = arr.map((val,index)=>{ if(index <= this.state.star){ return( <Text onPress={()=>{this.rate(index)}} style={styles.actived}>★</Text> ) }else{ return( <Text onPress={()=>{this.rate(index)}} style={styles.defalut}>★</Text> ) } }); } return ( <View style={{flexDirection:'row'}}> {star} </View> ); }const styles = { actived:{ fontSize:'70rem', color:'#f5a623' }, defalut:{ fontSize:'70rem', color:'#aaaaaa' }};
实现了基本功能之后还有时间,就想着拓展一下这个组件的功能;
最后决定添加一下几个功能:
1、设置是否只读; <Yrate disable />
2、自定义字符; <Yrate character='好'/>
3、自定义五角星(或其他字符)的总数; <Yrate count={6}/>
4、设置默认选中个数; <Yrate defaultValue={3}/>
5、添加改变选个个数时的事件:onChange; <Yrate onchange={(e)=>console.log(e)}/>
整个组件的代码和文档如下:
/** * Created by b on 2017/7/26. */import {createElement, Component, render} from 'rax';export default class Yrate extends Component { constructor() { super(); this.state = {}; } componentDidMount() { const { character,disabled,count,defaultValue } = this.props; let arr = []; if(count){ for(let i = 0;i<count;i++){ arr.push(i+1) //根据count来设置个数 } }else{ arr = [1,2,3,4,5] //默认个数是5 } this.setState({ character:character?character:'★', disabled, arr, star:defaultValue?defaultValue-1:4 //设置默认选中个数,默认值是5 })
}
rate(index){ if(this.props.onChange){ this.props.onChange(index+1); } if(this.state.star == 0 && index == 0){ this.setState({ star:-1 }) }else{ this.setState({ star:index }) } } disabled(){ alert('对不起你不能修改!') } render() { const { arr,character,disabled } = this.state; let star = []; if(arr){ star = arr.map((val,index)=>{ if(index <= this.state.star){ return( <Text onPress={()=>{disabled?this.disabled():this.rate(index)}} style={styles.actived}>{character}</Text> ) }else{ return( <Text onPress={()=>{disabled?this.disabled():this.rate(index)}} style={styles.defalut}>{character}</Text> ) } }); } return ( <View style={{flexDirection:'row'}}> {star} </View> ); }}const styles = { actived:{ fontSize:'70rem', color:'#f5a623' }, defalut:{ fontSize:'70rem', color:'#aaaaaa' }};
属性 说明 类型 默认值disabled 只读,无法进行交互 boolean falsecharacter 自定义字符(不支持emoji)text ★count star总数 number 5defaultValue 默认值 number 5onChange 选择时的回调 Function(number) -
阅读全文
0 0
- 一个基于rax的评分组件
- iOS中实现一个支持小数的星星评分组件
- 评分组件
- 评分组件
- 一个基于组件的动态对象系统
- 一个基于组件的动态对象系统
- 一个基于组件的动态对象系统
- 一个基于组件的动态对象系统
- 一个基于组件的动态对象系统
- 一个基于组件的动态对象系统
- 基于vue2.0的一个分页组件
- 一个简单的星星评分
- RatingBar评分条组件的学习
- 一个memory-based协同过滤算法的改进(基于隐式评分)
- 基于jQuery的星级评分插件
- 基于jQuery的动态星星评分效果
- “基于485总线的评分系统”
- soledede-基于KNN的评分预测
- ORACLE中 SEQUENCE自动增长 用法
- 在Pycharm中自动添加时间日期作者等信息
- 装载机稳定模块讲解
- iOS学习笔记-087.彩票02——自定义tabBar
- 解决Linux磁盘空间满的问题
- 一个基于rax的评分组件
- 初识C++你需要知道的那些基础
- 对ul 下的li标签执行点击事件
- mysql常用日期时间函数
- xmldi和注解
- 系统虚拟机管理
- 分区恢复之 0扇区 详解
- ffmpeg + SDL2 实现的视频播放器「视音频同步」
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 10 创建ROS消息和ROS服务