1. HTML模板

  Jsx是react的语法糖,最终会被编译成js语法。因此需要第三方库browser将jsx转换成js。

  由于react 0.14版本之后,将react和react-dom拆分,所以需要分别引入react和react-dom

  这是官网的一个demo

 <!DOCTYPE html>
 <html>
   <head>
     <script src="../build/react.js"></script>
     <script src="../build/react-dom.js"></script>
     <script src="../build/browser.min.js"></script>
   </head>
   <body>
     <div id="example"></div>
     <script type="text/babel">
       ReactDOM.render(
         <h1 color>Hello, world!</h1>,
         document.getElementById('example')
       );
     </script>
   </body>
 </html>

  但是编译之后是这样的:

React.render( React.createElement("h1", {color: "red"}, "Hello, world!"), document.getElementById('example') );  

  render()方法里面的html代码被转换成了React.createElement.因此阔以使用React.createElement来创建模板,但不推荐。

  React.createEleemt(type,[props],[...children]):

    type:the type argument can be either a tag name string(such as "div"),or a React Compoment()

  jsx语法规则:render方法第一个参数,首写字母如果是小写的就是HTML代码,如果是大写字母就是React组件;

        jsx会主动去检查标签是否闭合,如果没有闭合,直接报错。

2.ReactDOM.render()+js

  只需要用大括号括起来就可以使用js语法。

 var names = ['Alice', 'Emily', 'Kate'];

       ReactDOM.render(
         <div>
         {
           names.map(function (name) {
             return <div>Hello, {name}!</div>
           })
         }
         </div>,
         document.getElementById('example')
       );

  编译之后变成:

 var names = ['Alice', 'Emily', 'Kate'];
 React.render(
   React.createElement("div", null, names.map(function (name) {
     return React.createElement("div", null, "Hello, ", name, "!")
   }) ),
  document.getElementById('example')
 );  

还是三个参数,第二个arg为null,第三个参数就是js代码。所以js代码只能放一行表达式,不能有;出现。

比如这样写就是错误的:

 React.render(
 <div>
 {
 var a = 1;
 names.map(function (name) {
 return <div>Hello, {name}!</div>
 })
 }
 </div>,
 document.getElementById('example')
 ); 

3.render 数组

  arr是个数组,jsx会把arr的所有成员都添加到模板中。只需要用{}把arr括起来,表示js代码即可。

var arr = [
  <h1>Hello world!</h1>,
  <h2>React is awesome</h2>,
];
ReactDOM.render(
  <div>{arr}</div>,
  document.getElementById('example')
);

编译后结果:

 React.render(
          React.createElement("div", null, [<h1>Hello world!</h1>,<h2>React is awesome</h2>,]),
         document.getElementById('example')
        );

react学习笔记-01的更多相关文章

  1. react学习笔记01

    被项目拖了半年的我终于有时间学习react 了 下面是我最近学习的笔记 支持jsx语法 ReactDOM.render( <div> <h1>hello, word</h ...

  2. 软件测试之loadrunner学习笔记-01事务

    loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. HTML如何转XTML

    ob_start(); $html = curl_init('http://www.beijing.gov.cn/'); curl_exec($html); $html = iconv('GBK',' ...

  2. win7 VS2008 ffmpeg release 版本崩溃 0x00905a4d 处未处理的异常

    这个坑, 我始终不相信编码的问题,但还是花了一上午加各种调试代码.一般加个断点,调试几下就知道是什么问题.在最后找不到解决办法的情况下google了一下,短短几分钟解决了这个问题. 程序都是踩着各种坑 ...

  3. [Go语言学习]之一:搭建单元测试环境

    最近开始正式的学习Go语言,奉行我学习一项新技术的步骤和原则( 笔记 + 单元测试 + demo ).首先学习了开发环境的配置,并立即搭建了单元测试的环境,这样可以一边写笔记,一边进行测试和学习,从而 ...

  4. autotools入门笔记(二)——创建和使用静态库、动态库

    带有静态库或者动态库的工程的构建过程与上一节()只包含一个源文件的工程的构建过程是类似的.只是对于复杂的工程,如果包含多个还有源文件的目录时,需要对每个包含源文件的目录执行构建过程,另外创建和使用库文 ...

  5. MJRefresh框架使用及说明

    一. MJRefresh的类解释. 1.MJRefreshComponent              所有刷新控件的基类别.(component: 成分,组件) 2.MJRefreshNormalH ...

  6. Swift3.0服务端开发(四) MySQL数据库的连接与操作

    本篇博客我们来聊聊MySQL数据库的连接与操作.如果你本地没有MySQL数据库的话,需要你先安装MySQL数据库.在Mac OS中使用brew包管理器进行MySQL的安装是及其方便的.安装MySQL的 ...

  7. Python学习笔记---形式参数(parameter)和实际参数(argument)

    def mydemo(name): '函数定义过程中的name是叫形参' #因为它只是一个形式,表示占据一个参数位置 print('传递进来的' + name + '叫做实参,因为它是具体的参数值!' ...

  8. springMVC框架中json处理

    1.在项目中导入jackson-core.jar包 2.使用@ResponseBody注解,此注解会自动装换为json 如图: 3.如此,便可以得到json对象

  9. 关于JAVA中split方法使用竖线异常的问题

    split表达式,其实就是一个正则表达式. *  ^ | 等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即\\加以转义.不然分割的结果就不是你想要的.

  10. Web VLC 设置 tcp 协议播放

    前言 web 端播放rtsp 流,一般都是采用vlc插件,默认是用 UDP 协议播放,这就会存在丢包的可能性,导致界面会变花,要想不花,需要使用更可靠的TCP协议.关于这两种协议的区别,大家可以自行查 ...