这是我真正意义上地用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. linux下共享库的注意点之-fpic

    在编译共享库必须加上-fpic.这是为什么呢? 首先看一个简单的例子: #include <stdio.h> int fun1() { printf("fun1\n") ...

  2. 微信公众平台可通过UnionID机制在多公众号间帐号互通

    微信公众平台越来越注重开发者的反馈信息了,这不,微信开放平台提供了UnionID机制,通过获取用户基本信息接口,开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个公众号,可使用以下办法通 ...

  3. jquery.validate.js插件使用

    jQuery验证控件jquery.validate.js使用说明+中文API 官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-valid ...

  4. ViewState与Session [转]

    昨天偶然看到网上有人讨论究竟是该用viewstate还是session来保存信息. 忽然觉得有必要去深入的研究一下这两个东东了,我们先来看深入分析一下viewstate, 为了分析的相对完整性,先从简 ...

  5. linux 命令笔记

    linux 命令 创建目录 mkdir XX 列出目录 ls 进入目录 cd .. 进入上层目录 cd xx 进入xx目录 cd ~ 进入用户主目录 删除目录 rm -fr XX 清空目录,谨慎使用 ...

  6. DNSmasq – 配置DNS和DHCP

    DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络.它提供了DNS功能和可选择的DHCP功能可以取代dhcpd(DHCPD服务配置)和bind等服务,配置起来更简单,更适用 ...

  7. iOS中关于NavigationController中preferredStatusBarStyle一直不执行的问题

    重点:真的能改吗?跑起来毛用没有. 1.还要在plist文件里把View controller-based status bar appearance设置成YES. 2.一定要写UINavigatio ...

  8. SVM实现邮件分类

    首先学习一下svm分类的使用. 主要有以下步骤: Loading and Visualizing Dataj Training Linear SVM Implementing Gaussian Ker ...

  9. 自动换行 lable换行 div换行 span换行 label换行

    label  word-break: break-all; white-space: normal;

  10. GO语言中json与map的转换

    直接上代码(需要引入encoding/json包) // 当前程序的包名 package main // 导入其它的包 import ( "encoding/json" " ...