官方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. 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态

    最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...

  2. Sublime Text3安装JsHint

    介绍 Sublime Text3使用jshint依赖Nodejs,SublimeLinter和Sublimelinter-jshint. NodeJs的安装省略. 安装SublimeLinter Su ...

  3. 【社工】NodeJS 应用仓库钓鱼

    前言 城堡总是从内部攻破的.再强大的系统,也得通过人来控制.如果将入侵直接从人这个环节发起,那么再坚固的防线,也都成为摆设. 下面分享一个例子,利用应用仓库,渗透到开发人员的系统中. 应用仓库 应用仓 ...

  4. C语言 · 整数平均值

    编写函数,求包含n个元素的整数数组中元素的平均值.要求在函数内部使用指针操纵数组元素,其中n个整数从键盘输入,输出为其平均值. 样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以 ...

  5. PowerShell过滤文件中的重复内容

    Get-Content -Path E:\test11\data.txt | Sort-Object | Get-Unique 源文件: AA0001 2014-06-30 15:27:13.073 ...

  6. Emoji选项列表

    一.需要的前提文件 从网上下载Emoji的表情包,当然是png的图片,因为WPF不支持彩色的Emoji,所以,做列表的时候,需要用图片. 随着压缩包一起的还有一个Emoji.xml文件,文件的层级结构 ...

  7. [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...

  8. 自己来实现一个简易的OCR

    来做个简易的字符识别 ,既然是简易的 那么我们就不能用任何的第三方库 .啥谷歌的 tesseract-ocr, opencv 之类的 那些玩意是叼 至少图像处理 机器视觉这类课题对我这种高中没毕业的人 ...

  9. Oozie分布式任务的工作流——Spark篇

    Spark是现在应用最广泛的分布式计算框架,oozie支持在它的调度中执行spark.在我的日常工作中,一部分工作就是基于oozie维护好每天的spark离线任务,合理的设计工作流并分配适合的参数对于 ...

  10. SQLServer如何添加try catch

    在.net中我们经常用到try catch.不过在sqlserver中我们也可以使用try catch捕捉错误,在这里把语法记录下来和大家分享一下, --构建存储过程CREATE PROCEDURE ...