这是我真正意义上地用react实现一些东西。这次分享的是一个很简单的小组件,效果图先放上来:

  

  

  前端样式用的是一套框架。功能很简单,就是根据选择的维度,在成员里选择对应这个维度的选项。

  

  首先初始化一些数据,这里我们要关注的就是newMeasureText,这是维度的value;newMeasureMember,这是维度的text。headerMsg是一个数组,作用是用来存放选择的维度和成员,所以肯定是一个二维数组。newLists是一个数组,作用是用来存放对应多维度的index的option选项(所以这里面的数据肯定是一个二维数组,包括select的index和option的内容,格式上应该是[[{'value': 'RMB', 'name': 'RMB'}, {'value': 'USD', 'name': 'USD'}],[{'value': 'RMB', 'name': 'RMB'}, {'value': 'USD', 'name': 'USD'}]]这样的)。optionList是一个对象,存放的是维度和对应该维度的成员,optionList实际应该从store中传过来,这里为了演示,直接把对象内容写在初始化里了。

  this.fnAddMeasure = this.onAddMeasure.bind(this);this.fnRemoveMeausre = this.onRemoveMeasure.bind(this);这2条是绑定添加维度和删除维度的按钮的,增加和删除的功能。

  增加和删除功能非常简单,就是控制数组的长度,增加的时候push一条记录进去,删除的时候pop最后一条记录。

  

  render内容如下:

  

  很明显的需要2次map,第一次是需要遍历headerMsg,来渲染已经保存的多个select,第二次是需要遍历newLists,来渲染对应某个select的option选项。它们之间依靠idx(index)来联系。这里我还踩了一个坑,之前我是把listSection这个对象的遍历放到signedDataSection对象外部的。然后发现react渲染的时候是先渲染成员select里的listSction对象(只会渲染一次),然后再渲染signedDataSection对象(会遍历多次),也就是说是完全分开渲染的,后果就是成员select里的值永远是newLists里最后一个值,也就是所有的成员option都是一样的。所以这listSction对象一定要放到signedDataSection对象里,这样每次渲染他们是同步的,先渲染一个成员select,再渲染一个维度select,依次循环下去。

  最后,当选择的值放生改变触发的函数如下:

  

  change函数里要做就是当你改变值的时候更新headerMsg数组和newLists数组里对应idx的headerMsg[idx]和newLists[idx]值。

  到这里这个小组件就完成了。第一次写react,是边搜索边猜想边思考边调试,当然最终要的是,其实整个大的逻辑已经被某个大大写好了,加上我碰到问题的时候,大大每次都给了我非常多的提示和指点,按照大大的指点,我要做的就是完成这一小部分的功能和逻辑,还是要感慨一下有人指点,对于新知识掌握起来就是快啊。

  

  

利用React实现表头维度功能的更多相关文章

  1. React Native移动框架功能研究

    React Native移动框架功能研究 此篇只研究React Native框架的功能. 一.React Natvie是什么 React Native是使用React(或者说JS)来开发原生APP的框 ...

  2. 利用 React 高阶组件实现一个面包屑导航

    什么是 React 高阶组件 React 高阶组件就是以高阶函数的方式包裹需要修饰的 React 组件,并返回处理完成后的 React 组件.React 高阶组件在 React 生态中使用的非常频繁, ...

  3. 利用其它带文件防护功能的软件防止*.asp;*.jpg写入文件。

    此木马是一个.NET程序制作,如果你的服务器支持.NET那就要注意了,,进入木马有个功能叫:IIS Spy,点击以后可以看到所有站点所在的物理路径.以前有很多人提出过,但一直没有人给解决的答案.. 防 ...

  4. [置顶] LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句

    LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句 declare @sql varchar(4000), @dirpath varch ...

  5. [PHP]利用MetaWeblog API实现XMLRPC功能

    [PHP]利用MetaWeblog API实现XMLRPC功能 | OWNSELF [PHP]利用MetaWeblog API实现XMLRPC功能 Windows Live Writer是一款小巧的写 ...

  6. 利用React/anu编写一个弹出层

    本文将一步步介绍如何使用React或anu创建 一个弹出层. React时代,代码都是要经过编译的,我们很多时间都耗在babel与webpack上.因此本文也介绍如何玩webpack与babel. 我 ...

  7. 利用React Native 从0到1 开发一款兼容IOS和android的APP(仿造京东)

    最近有一部电视剧叫做<微微一笑很傻逼>里面有个男猪脚,人们都叫他大神~我觉得吧~大神是相对的~所以~啥事都得谦虚! 好了 今天介绍的是如何从0到1利用React Native开发一款兼容I ...

  8. java翻译到mono C#实现系列(4) 利用CountDownTimer类实现倒计时功能 mono版

    群里的朋友问利用CountDownTimer类实现倒计时功能怎么实现,我就百度了,参考http://blog.csdn.net/qq344429461/article/details/7521361写 ...

  9. C#下利用正则表达式实现字符串搜索功能的方法(转)

    关键字:正则表达式.元字符.字符串.匹配: 1.正则表达式简介:正则表达式提供了功能强大.灵活而又高效的方法来处:.NET框架正则表达式并入了其他正则表达式实现的: 2.字符串搜索:正则表达式语言由两 ...

随机推荐

  1. log4jdbc 使用

    像 hibernate, mybatis 都是不打印真正执行的sql的,所以借助 log4jdbc 打印sql以及统计执行时间是非常方便的. 配置log4jdbc 有很多种方法,比如通过spring的 ...

  2. android微信聊天记录导出到电脑【微信安卓版技巧】

    微信,对它又爱又恨!爱的是微信能替代很多手机通话短信,恨的是有些较早前的手机不能友好支持,比如ytkah之前用的i8000,挺上手的,就是没办法装微信,当时工作需要必须用微信,只好忍痛割爱买了个and ...

  3. 新语言代码高亮及Windows Live Writer插件开发

    最近在博客园做一些学习笔记.一个是看apple的swift官方书,另外一个是随学校课堂(SICP)学习scheme. 这两种语言都谈不上普及(或者说swift太新).博客园原来的windows liv ...

  4. css3径向渐变详解-遁地龙卷风

    (-1)写在前面 我用的是chrome49,如果你用的不是.可以尝试换下浏览器前缀.IE在这方面的实现又特例独行了.不想提及-,这篇是为后续做准备. (0)快速使用 background-image: ...

  5. 周末娱乐一下--------恶搞windows小脚本

    下面这是个循环DOS命令,使用了C中的goto语句 echo命令式输出命令 set命令是设置命令 var是变量,初始为0 :continue是一个用于goto的标示. %var%输出变量名,%var% ...

  6. python 3.x urllib学习

    urllib.request import urllib.request as ur url='http://ie.icoa.cn' user_agent = 'Mozilla/4.0 (compat ...

  7. start WampServer如何关闭浏览目录

    打开Httpd.conf IncludesNOEXEC Indexes 去掉这个代码就可以了

  8. linux 用户创建、管理、权限分配

    (1)su与sudo su:通过su可以在用户之间切换,如果超级权限用户root向普通或虚拟用户切换不需要密码,什么是权力?这就是!而普通用户切换到其它任何用户都需要密码验证: sudo: sudo扮 ...

  9. javascript闭包和作用域链

    最近在学习前端知识,看到javascript闭包这里总是云里雾里.于是翻阅了好多资料记录下来本人对闭包的理解. 首先,什么是闭包?看了各位大牛的定义和描述各式各样,我个人认为最容易一种说法: 外部函数 ...

  10. Spring PropertyPlaceholderConfigurer数据库配置

    pom.xml中添加依赖 <!-- mysql-connector-java --> <dependency> <groupId>mysql</groupId ...