• 23-React Render Element


    第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

  • 相关阅读:
    为什么说 LINQ 要胜过 SQL
    统一日志系统 Log4Net/ExceptionLess
    使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)
    使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
    安全的API接口解决方案
    任务调度及远端管理(基于Quartz.net)
    关于.NET参数传递方式的思考
    C# Parsing 类实现的 PDF 文件分析器
    .NET的弹性及瞬间错误处理库Polly
    Mybatis官方网站
  • 原文地址:https://www.cnblogs.com/fengxuefei/p/6250600.html
Copyright © 2020-2023  润新知