第23节 React Render Element

1、Element

元素是反应应用程序的最小积木。

元素描述你在屏幕上看到的内容.:

const element= <h1>你好,世界</h1>;

不同于浏览器的DOM元素,react元素是普通的对象,React 通过解析每一个创建的 Element, 计算出需要对 DOM 进行的实际操作来完成渲染的

var React = require('react');
var ReactDOM = require('react-dom'); var HelloWorld = React.createClass({
render: function () {
return (
<p>
Hello,<input type="text" placeholder="Your name here" />
It is {this.props.date.toTimeString()}
</p>
);
}
}); setInterval(function () {
ReactDOM.render(
<HelloWorld date={new Date()} />,
document.getElementById('root')
);
}, 500);

打开浏览器看看效果:发现时间一直在变化,而input框,无论我们怎么操作,一直保持原样不变。

按照我们固有的想法,应该是每隔500毫秒,重新替换div当中的内容,而输入框一直不变.

上面的例子中,我们只是创建了个组件,并将它插入DOM中,并没有写别的代码。而奇特的效果都是React帮我们实现的。

除非有必要,否则React是不会直接去操作DOM的。React使用了内部的虚拟DOM,当数据发生改变,先在虚拟DOM中计算变化,最后将变动的部分反应到真实的DOM中。

我们知道,频繁操作DOM代价是昂贵的,它会导致页面反复repaint。React声称自己很快,正是基于此。

2、属性

input相对于这个组件来说,是它的属性,并且没有嵌入动态的数据。而在React的设定中,属性是不可变的。

var HelloWorld = React.createClass({
render: function () {
return (
<p>
Hello,<input type="text" placeholder="Your name here" value={this.props.date.toTimeString()}/>!
It is {this.props.date.toTimeString()}
</p>
);
}
});
setInterval(function () {
ReactDOM.render(
<HelloWorld date={new Date()} />,
document.getElementById('root')
);
}, 500);

3、ReactElement

React 中最主要的类型就是 ReactElement。它有四个属性:type,props,key 和 ref。

它没有方法,并且原型上什么都没有

var root = React.createElement(‘div');

为了渲染一个新的树形结构到 DOM 中,你创建若干个 ReactElement,然后传给 React.render 作为第一个参数,同时将第二个参数设为一个正规的 DOM 元素 (HTMLElement 或者 SVGElement)。不要混淆 ReactElement 实例和 DOM 元素实例。

一个 ReactElement 实例是一个轻量的,无状态的,不可变的,虚拟的 DOM 元素 的表示。是一个虚拟 DOM。

React.render(root, document.body);

要添加属性到 DOM 元素,把属性对象作为第二个参数传入 React.render,把子级作为第三个参数传给 React.render

23-React Render Element的更多相关文章

  1. React的Element的创建和render

    React的Element是React应用程序的最小构建块,它是用来描述我们在屏幕上看到的浏览器页面上的内容. 在React中构建 Element 有两种方式: 1.JSX的方式,JSX不是React ...

  2. React.render和reactDom.render的区别

    刚开始学习react.js.发现网上的资料,有些是写着react.render,有些写着reactDom.render.觉得很奇怪就查阅了一下资料.解释如下: 这个是react最新版api,也就是0. ...

  3. ReactDom.render和React.render的区别

    这个是react最新版api,也就是0.14版本做出的改变.主要是为了使React能在更多的不同环境下更快.更容易构建.于是把react分成了react和react-dom两个部分.这样就为web版的 ...

  4. react render

    实际上react render方法返回一个虚拟dom 并没有去执行渲染dom 渲染的过程是交给react 去完成的 这就说明了为什么要在所有数据请求完成后才去实现render 这样做也提高了性能.只调 ...

  5. React Render Callback Pattern(渲染回调模式)

    React Render Callback Pattern,渲染回调模式,其实是将this.props.children当做函数来调用. 例如: 要根据user参数确定渲染Loading还是Profi ...

  6. React render algorithm & Fiber vs Stack

    React render algorithm & Fiber vs Stack React 渲染算法 & Fiber vs Stack https://stackoverflow.co ...

  7. React render twice bug

    React render twice bug React bug constructor render twice bug update render twice bug StrictMode htt ...

  8. [React Testing] Element types with Shallow Rendering

    When you render a component with the Shallow Renderer, you have access to the underlying object. We ...

  9. [React] Render Elements Outside the Current React Tree using Portals in React 16

    By default the React Component Tree directly maps to the DOM Tree. In some cases when you have UI el ...

随机推荐

  1. 开启JMX功能,使JVisvualVM能够连接JVM

    -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.manageme ...

  2. ios上的 button和input-button为什么不水平居中的

    在iphone6plus上的button中文本上不居中,如下图: 造成的原因,是button的padding不为零,造成的,因而设置padding: 0:就可以解决

  3. PHP访问带密码的Redis

    1. 设置Redis密码,以提供远程登陆打开redis.conf配置文件,找到requirepass,然后修改如下: requirepass yourpassword yourpassword就是re ...

  4. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增消息管理

    在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“消息管理”模块.“消息管理”模块是对框架的所有消息进行管理.通过左侧的消息分类可以查看所选分类的所有消息列表.在主界面上我 ...

  5. mac安装paramiko

    $ brew install openssl $ /usr/local/opt/openssl/bin/c_rehash $ export ARCHFLAGS="-arch x86_64&q ...

  6. Leetcode: Sentence Screen Fitting

    Given a rows x cols screen and a sentence represented by a list of words, find how many times the gi ...

  7. H5新特性 input type=date 在手机上默认提示显示无效解决办法

    目前PC端对input 的date类型支持不好,我试下来的结果是只有chrome支持.firefox.IE11 都不支持.而且PC端有很多日历控件可供使用.就不去多考虑这点了. 那么在移动端的话,io ...

  8. Last time, I wrote a pager, but now it seems this no longer has use, so I want to paste it here.

    public class Pager<T> where T : new() { private IEnumerable<T> _all; private IEnumerable ...

  9. CSS中position小解

    我们先来看看CSS3 Api中对position属性的相关定义: static:无特殊定位,对象遵循正常文档流.top,right,bottom,left等属性不会被应用. relative:对象遵循 ...

  10. 字符串反转----将this is good 转化为good is this 输出。

    思路:现将整个字符串反转,再将每个单词反转: #include "iostream" #include "cstring" using namespace st ...