react项目实战(权限模块开发四) SkinDropDown插件开发
来源:互联网 发布:豚丫丫这款软件好吗 编辑:程序博客网 时间:2024/06/14 18:23
login.js文件中用到了一个SkinDropDwon插件
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' // 引入Reactimport { connect } from 'react-redux' // 引入connectimport DropItem from '../components/DropItem' // 引入展示组件Listconst 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传递过来。
阅读全文
0 0
- react项目实战(权限模块开发四) SkinDropDown插件开发
- react项目实战(权限模块开发一) 配置路由
- react项目实战(权限模块开发六)semantic-ui-react 加入到开发环境中
- react项目实战(权限模块开发三) 登陆界面开发
- react项目实战(权限模块开发五) 系统首页开发
- react项目实战(权限模块开发二) 项目配置修改
- react项目实战(权限模块开发七)通过ajax技术获取数据
- react项目实战(权限模块开发八)js文件分开打包
- react项目实战(权限模块开发九)dva的table控件使用
- React开发实战pdf
- React Native iOS原生模块开发实战|教程|心得|如何创建React Native iOS原生模块
- React Native Android原生模块开发实战|教程|心得|如何创建React Native Android原生模块
- maven实战(四)多模块项目
- Android开发--IM聊天项目(四)--IPC实战
- Nginx模块开发实战
- nginx模块开发实战
- nginx模块开发实战
- nginx模块开发实战
- Java+Selenium3框架设计准备篇7-TestNG如何disable一些case
- 自定义View绘制简单基本图形
- leetcode 463. Island Perimeter
- 《java编程思想》P140-P160(第七章复部+第八章部分)
- jupyter多环境切换工作目录
- react项目实战(权限模块开发四) SkinDropDown插件开发
- dfa
- 转:centos7.2安装jdk1.6和/etc/profile不生效问题
- serialize()中文乱码
- django生成项目文件
- 梯度下降法
- bootstrap辅助类和响应式工具
- 学生信息管理系统总结1安装SQL server
- 关于zsh的一些配置