react项目实战(权限模块开发四) SkinDropDown插件开发
2017-07-19 11:33
639 查看
login.js文件中用到了一个SkinDropDwon插件
SkinDropCom代码如下:
该组件又用到一个无状态的插件DropItem:
DropItem.js文件内容如下:
该组件对document.body进行了一个事件注册,目的是点击界面其他地方可以将下拉隐藏掉,该事件需要从父界面login传递过来。
import SkinDropCom from '../../components/SkinDropCom';
... <SkinDropCom skinsList={loginMd.skinsList} visibility={loginMd.visibility} changeCurSkin={this._changeCurSkin} showDropDown={this._showDropDown} width="180px"/> ...
SkinDropCom代码如下:
import React, { Component, PropTypes } from 'react' // 引入React import { connect } from 'react-redux' // 引入connect import DropItem from '../components/DropItem' // 引入展示组件List const dropDowStyle = (visibility, width)=> { return { visibility: visibility, width: width } } class SkinDropCom extends Component { constructor(...props) { super(...props); [ '_onClickHandler' ].forEach(func=> { this[func] = this[func].bind(this); }); } componentDidMount() { document.body.addEventListener('click', this._onClickHandler, false); } componentWillUnmount() { document.body.removeEventListener('click'); } _onClickHandler(e) { const { showDropDown }=this.props; showDropDown(false); } render() { // 通过this.props获取到lists的值 const { skinsList, visibility,changeCurSkin,width } = this.props; var getItemProps=(itemObj, changeCurSkin, index)=>{ return { itemId: itemObj.itemId, key: index, changeCurSkin: changeCurSkin, text: itemObj.text } } return ( <div className="dhxcombolist_material" style={dropDowStyle(visibility,width)}> { skinsList.map((itemObj, index) => <DropItem {...getItemProps(itemObj, changeCurSkin, index)}></DropItem> )} </div> ) } } export default SkinDropCom;
该组件又用到一个无状态的插件DropItem:
<div className="dhxcombolist_material" style={dropDowStyle(visibility,width)}> { skinsList.map((itemObj, index) => <DropItem {...getItemProps(itemObj, changeCurSkin, index)}></DropItem> )} </div>
DropItem.js文件内容如下:
// 动态数据列表 import React, {PropTypes} from 'react' export default function DropItem({itemId,text,changeCurSkin}){ return ( <div className="dhxcombo_option" id={itemId} onClick={(ev)=>{ ev.stopPropagation(); changeCurSkin(text); }}> <div className="dhxcombo_option_text">{text}</div> </div> ) } DropItem.propTypes = { itemId: PropTypes.string.isRequired, text: PropTypes.string.isRequired }
该组件对document.body进行了一个事件注册,目的是点击界面其他地方可以将下拉隐藏掉,该事件需要从父界面login传递过来。
相关文章推荐
- react项目实战(权限模块开发九)dva的table控件使用
- react项目实战(权限模块开发七)通过ajax技术获取数据
- react项目实战(权限模块开发六)semantic-ui-react 加入到开发环境中
- react项目实战(权限模块开发三) 登陆界面开发
- react项目实战(权限模块开发二) 项目配置修改
- react项目实战(权限模块开发五) 系统首页开发
- react项目实战(权限模块开发一) 配置路由
- react项目实战(权限模块开发八)js文件分开打包
- Magento2.x 插件 Module(模块) 开发实战
- React Native Android原生模块开发实战|教程|心得|如何创建React Native Android原生模块
- React+Redux开发实战项目【美团App】,没你想的那么难
- 【小松教你手游开发】【unity系统模块开发】Unity动画系统项目实战
- 2017.7.1 慕课网-Java从零打造企业级电商项目实战:3 category模块设计与开发
- 基于ABP模块组件与依赖注入组件的项目插件开发
- 从一个实战项目来看一下React Native开发的几个关键技术点
- 2017.7.1 慕课网-Java从零打造企业级电商项目实战:2用户模块设计与开发
- Jenkins项目实战之-钉钉提醒插件二次开发举例
- React新闻头条项目实战React.js入门基础与案例开发
- 2017.7.1 慕课网-Java从零打造企业级电商项目实战:3 category模块设计与开发
- React 16+Redux+React Router 4 Node.Js全栈开发招聘App项目实战视频