React基本组件之DropDown
2017-06-26 15:41
295 查看
本文将使用react来实现一个简单的DropDown组件。
组件的html和css部分不再多说,大家应该都可以搞定,主要来讲一讲组件的内部行为。比如状态的变化,数据的传递处理等等。
组件github地址:https://github.com/oliver0910/React-Component
list: 数据对象(支持字符串数组和键值对对象)
onChange: 选项选择后的回调事件
首先从props中获取到用户传入的list对象,然后根据list的类型进行对应的格式转换,主要是为了统一数据结构,以便于之后的使用。
这里的语法大多都是es6语法,如果不了解可以先去学习一下。
select函数用于处理用户点击选项的事件。
toggle函数用于控制组件中list元素的展示和隐藏。
shrink函数用于隐藏list元素并绑定mousedown事件,这里重点说一下,绑定mousedown函数是为了处理在list展示的情况下,点击页面其他区域后,隐藏list。
mousedownOut中遍历了当前发生点击事件的所有父级元素,如果找到了组件的容器,则说明事件发生在组件内容,这种情况不作处理。否则,隐藏list。
组件的html和css部分不再多说,大家应该都可以搞定,主要来讲一讲组件的内部行为。比如状态的变化,数据的传递处理等等。
组件github地址:https://github.com/oliver0910/React-Component
组件效果图
参数
value: 当前选中的值list: 数据对象(支持字符串数组和键值对对象)
onChange: 选项选择后的回调事件
代码分析
参数解析
let list = this.props.list || []; //如果list是key-value形式的数据,则自动转换成[{name:'',value:''}]格式 if (typeof list === 'object' && !Array.isArray(list)) { list = Object.keys(list).map(key=>({ name: list[key], value: key })); } //如果list是字符串数组 list = list.map(o=>typeof o === 'string' ? {name:o, value: o} : o);
首先从props中获取到用户传入的list对象,然后根据list的类型进行对应的格式转换,主要是为了统一数据结构,以便于之后的使用。
这里的语法大多都是es6语法,如果不了解可以先去学习一下。
状态处理
mousedownOut(e){ for(var node = e.target;node;node = node.parentNode) if(this.refs.me == node) return; this.shrink(); }, shrink() { this.setState({open: false}); removeEventListener("mousedown", this.mousedownOut); }, toggle() { !this.state.open && addEventListener("mousedown", this.mousedownOut); this.setState({open: !this.state.open}); }, select(value) { if (this.state.value !== value) { this.shrink(); this.setState({value},()=>this.props.onChange && this.props.onChange(value)); } }
select函数用于处理用户点击选项的事件。
toggle函数用于控制组件中list元素的展示和隐藏。
shrink函数用于隐藏list元素并绑定mousedown事件,这里重点说一下,绑定mousedown函数是为了处理在list展示的情况下,点击页面其他区域后,隐藏list。
mousedownOut中遍历了当前发生点击事件的所有父级元素,如果找到了组件的容器,则说明事件发生在组件内容,这种情况不作处理。否则,隐藏list。
相关文章推荐
- React 组件基本使用(一)
- ReactNative之基本组件
- react-native-tab-navigator组件的基本使用示例代码
- 初识ReactJS的组件化开发(二):组件嵌套和属性的基本使用
- 使用React.js生成基本组件
- React 组件基本使用(3) ---父子组件之间的通信
- React--基本组件
- React 组件基本使用(二)
- React 组件基本使用(二)
- React 组件基本使用(三) ---父子组件之间的通信
- 零基础 游戏关卡选择,截图,查询组件等基本操作
- 第四章、ReactNative组件的封装
- React第三方组件3(状态管理之Flux的使用①简单使用)
- rman基本组件和主要术语
- React组件生命周期-正确执行运行阶段的函数
- React第三方组件3(状态管理之Flux的使用②TodoList上)
- 第08节、React组件:this.props.children
- 【基本组件】线程与线程池
- React组件导入的两种方式(动态导入组件的实现)
- React Native 组件生命周期