官方example 中basic-click-counter

 <script type="text/babel">
var Counter = React.createClass({
getInitialState: function () {
return { count: 0 };
},
handleClick1: function () {
this.setState({
count: this.state.count + 1,
});
},
handleClick2: function () {
hand();
},
render: function () {
return (
<div>
<button onClick={this.handleClick1}>
{this.state.count}
</button>
<button onClick={this.handleClick2}>
{this.state.count}
</button>
</div>
);
}
});
var hand = function(){
alert("sd");
}
ReactDOM.render(
<Counter />,
document.getElementById('container')
);
</script>

其中:

getInitialState 设置初始状态

设置点击事件并非一定用handleClick这个函数名,同样的你可以在创建组件时添加多个点击执行函数,例如handleClick1,handleClick2

利用不同的方式绑定并触发,指的一提的是在这个组件里所有的数据都是双向绑定的,如果你在响应事件中利用setState去改变组件中值,那么

真个组件都会触发相应值的刷新

这里就体现了数据和页面刷新的绑定效果,跟传统需要手动刷新形成对比。

发现问题:且看Counter组件的render函数,我们发现这里使用的是JSX语法,那么对于render函数而言,我们不能动态的创建dom节点,打个比方

倘若一个data数组中存在数据,我们需要根据数组的长度创建一个列表,每一行显示data[i]中的数据。如果在js中很容易利用字符串拼接然后添加到innerHtml

中即可,但是在JSX中目前来看,我是没有看到(但是不排除存在)。

这里需要提及下这种情况的必要性,基本上利用ajax和后台交互,然后将结果显示在前端,这种情况是必然出现的,所以如果你认为没必要了解这种情况,要么就是你还没有工作,

要么就是,你是前端还停留在静态网页的层次

提出猜想方案:

这里的动态创建在实际情况下无非就是实际操作DOM,然而React设计初衷之一就是降低DOM操作带来的性能损耗,所以如果需要动态创建,那么很明显需要的是动态创建虚拟节点,

然后再让react框架本身去实际进行渲染。问题就到如何动态创建虚拟节点上来了,这同样是个非常有意思的思考题,倘若react可以提供一个函数动态创建虚拟节点的函数,那么你动

态创建虚拟节点后,这个虚拟节点同样需要注册到组件中,等到组件状态刷新的时候,也要刷新你新增的这个节点,也就意味着创建虚拟节点的同时还需要绑定。在我看来这条路走下去

确实有些困难。

那么如果我们换个方向思考呢?

对于很多情况下来说,倘若我们把所有的状态都写出来呢?还是上面的问题把数组数据写成表格,首先我们是需要分页的,那么我们不妨写出一页全部行,如果有数据相应的数据填充,

没有就为空,这样子我们很容易实现某一页上的数据显示,然后我们只需要控制不同页面上的数据载入即可,react并没有新增任何dom节点(特指元素节点),只需要切换不同的状态即可

但是,

实际上上面所说的问题还是没有解决,那么问题到底是什么限制了无法动态创建dom节点呢?是react吗,貌似这里是jsx阻止了我们,因为jsx本身是在编译成js之后再去使用,

那么意味着我们很难在编译之前的代码中嵌入相应的部分从而在实际运行中动态编译之后的render函数达到符合预期的结果。js本身是可以达到这个效果的,但是jsx无法达到。

那么问题暂时挂起,待找到答案继续,如果有朋友可以解答这个问题,感激不尽

2017-1-5 天气雨 React 学习笔记的更多相关文章

  1. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  2. React学习笔记--程序调试

    React学习笔记 二 程序调试   前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...

  3. React学习笔记(一)- 入门笔记

    React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...

  4. React学习笔记(七)条件渲染

    React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...

  5. React学习笔记(六)事件处理

    React学习笔记(六) 五.事件处理 React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写. 如果采用JSX的语法,事件函数需要用大括号{}包裹函数名,不同于传统DOM字符串小括号的方 ...

  6. React学习笔记(五)State&声明周期

    React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...

  7. React学习笔记 - 组件&Props

    React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...

  8. React学习笔记 - 元素渲染

    React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...

  9. React学习笔记 - JSX简介

    React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...

随机推荐

  1. 【.net 深呼吸】细说CodeDom(7):索引器

    在开始正题之前,先补充一点前面的内容. 在方法中,如果要引用方法参数,前面的示例中,老周使用的是 CodeVariableReferenceExpression 类,它用于引用变量,也适用于引用方法参 ...

  2. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  3. ExtJS 4.2 组件的查找方式

    组件创建了,就有方法找到这些组件.在DOM.Jquery都有各自的方法查找元素/组件,ExtJS也有自己独特的方式查找组件.元素.本次从全局查找.容器内查找.form表单查找.通用组件等4个方面介绍组 ...

  4. 重撸js_2_基础dom操作

    1.node 方法 返回 含义 nodeName String 获取节点名称 nodeType Number 获取节点类型 nodeValue String 节点的值(注意:文本也是节点) 2.inn ...

  5. 【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别

    接口,强大,简单,交互,跨越平台 下面简单阐述这两大接口思想 一 REST: REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. ...

  6. Java学习之反射机制及应用场景

    前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...

  7. 微信小程序服务范围重大更新

    12.29日,小程序服务范围做了重大更新,增对富媒体和工具类型的小程序,增加了很多细分领域 富媒体:增加资讯,FM电台,有声读物等,媒体平台可上小程序了 工具:信息查询,网络代理,健康,企业管理等 , ...

  8. MSSQL 事务,视图,索引,存储过程,触发器

    事务 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.这特别适用于多用户同时操作的数据 ...

  9. ASP.NET 5 Beta 8 发布

    ASP.NET 5 的路线图(详见 ASP.NET 5 Schedule and Roadmap : https://github.com/aspnet/home/wiki/roadmap ):Bet ...

  10. 站在风口,你或许就是那年薪20w+的程序猿

    最近面试了一些人,也在群上跟一些群友聊起,发现现在的互联网真是热,一些工作才两三年的期望的薪资都是十几K的起,这真是让我们这些早几年就成为程序猿的情何以堪!正所谓是站在风口上,猪也能飞起来!我在这里就 ...