1. JSX是什么?

1)JSX是一种facebook发明的语法。就是将HTML和JS 可以同时书写。其实是一种js的语法糖。

但是浏览器不能识别,需要通过babel-loader来转译。

@babel/core @babel/preset-react(将html标签转为js代码)

2) const temp = <div>temp</div>;上面是JSX语法的代码。

// 整个是个js赋值运算,=右侧是html代码;是html和js的混写。

babel-loader将其转为js,如下:

  1. React.createElement(component, props, ...children) // 返回一个js对象,含有type,props等属性。然后等待被ReactDom.render渲染成真实DOM。

2.两种组件都要求首字母大写

React会将以小些字母开头的组件视为原生DOM标签。所以自定义组件名必须以大写字母开头!!

当小写字母时,第一个参数被解析成字符串。

当大写字母时,将其解析成Class或者函数组件。

3. jsx的{}不能运行语句

jsx代码分为js标签和{}; 后者要求里面是表达式或者变量。

语句没有返回值。

  1. <div>
  2. {text}
  3. </div>

1)if语句和for循环是语句,不是js表达式;不能使用在{}中

2) 三目运算符是虽然js表达式,可以使用;但是根据eslint规范,不能嵌套使用。

4. className不能写成class; htmlFor属性不能写成for

1) 因为jsx很大程度上还是遵循的js的规约。而js中使用小驼峰命名规范。

2) 在js中,class是js中的保留字,表示类;js中for是保留字,for循环。

5.key属性

1.key属性要求兄弟节点间唯一

不要求全局唯一。

所有通过map遍历生成的同级列表都要有一个唯一的key值。用于DOM DIff算法(同级同类型比较)的性能优化。

  1. <div>
  2. {
  3. ([1,2,3]).map(item => <span key={item}>{item}</span>)
  4. }
  5. </div>

同级先比较key值,如果key值相同,再比较类型和属性等。如果都相等就不需要删除新增元素。依次比较。

如果最后所有元素都相同,只是位置发生变化,那么只需要更换元素位置;不需要删除重建。提高性能。

2. key属性只传递给React

不会传递给组件。所以在props对象中,props.key读取不到, 返回undefined。

6.style属性

有两个{};外层括号表示是表达式括号;内部表示是个对象。

  1. <div style={{color: red}}>
  2. style属性
  3. </div>

7.html字符串模版渲染

  1. <div dangerouslySetInnerHTML={{_html: '<input />'}}>
  2. // 使用dangerouslySetInnerHTML属性渲染字符串模版
  3. // 否则直接渲染成字符串
  4. </div>

8. Props只读

react有一个严格的规则: 必须像纯函数一样保证他们的props不被修改。

9. 不能渲染的数据

true,false, undefined, null都不能渲染。

  1. <div />
  2. <div></div>
  3. <div>{false}</div>
  4. <div>{null}</div>
  5. <div>{undefined}</div>
  6. <div>{true}</div>
  7.  
  8. // 全部等价

但是对于运算符表达式返回布尔值,但是本身不是布尔值的,还是可以渲染。

  1. <div>
  2. {
  3. this.state.data.length && <div>sth</div>
  4. }
  5. </div>
  6. // 如果值是[],length为0,虽然表达式是false,但是本身还是渲染0
  7. // 应该
  8. <div>
  9. {
  10. this.state.data.length > 0 && <div>sth</div>
  11. }
  12. </div>

react须知的更多相关文章

  1. 【转载】React初学者入门须知

    http://www.oschina.net/news/75530/9-things-every-reactjs-beginner-should-know react.js入门学习 看了一遍,没什么特 ...

  2. React版本更新及升级须知(持续更新)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 18.0px "PingFang SC Semibold& ...

  3. 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo

    前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...

  4. 谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo

    前言 前端已经过了单兵作战的时代了,现在一个稍微复杂一点的项目都需要几个人协同开发,一个战略级别的APP的话分工会更细,比如携程: 携程app = 机票频道 + 酒店频道 + 旅游频道 + ..... ...

  5. React学习、安装及QuickStart

    首先看的是这个页面 http://www.cocoachina.com/webapp/20150721/12692.html 这里有个内容差不多的版本(精华版):http://www.cnblogs. ...

  6. react入门学习及总结

    前言 不知不觉一年又过去了,新的一年又到来,2019应该要好好思考,好好学点有用的东西,规划下自己今后的学习方向,不要再像以前那样感觉很迷茫. react简单介绍 官网及中文文档 https://re ...

  7. React的组件

    React的组件化思想尤为明显,一切皆组件,觉着比Vue的组件化思想更加凸显. const PacketBG = (props) =>( <div className="pack ...

  8. Mock平台3-初识Antd React 开箱即用中台前端框架

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 内容提要 首先说下为啥这次测试开发系列教程前端选择Antd React,其实也是纠结对比过最终决定挑战一把,想法大概有几下几点: 笔者自己 ...

  9. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

随机推荐

  1. 【浅析C++11】std::function和std::bind

    目录 std::function可调用对象包装器 std::function基本用法 std::function/std::bind与抽象工厂.工厂方法的一点思考 std::function可调用对象 ...

  2. Ural 1248 Sequence Sum 题解

    目录 Ural 1248 Sequence Sum 题解 题意 题解 程序 Ural 1248 Sequence Sum 题解 题意 给定\(n\)个用科学计数法表示的实数\((10^{-100}\s ...

  3. Python【函数使用技巧】

    写成“子函数+主函数”的代码结构,也是因为每个不同的功能封装在单独的函数代码中,方便后续修改.增删 import math # 变量key代表循环运行程序的开关 key = 1 # 采集信息的函数 d ...

  4. 自定义策略-简单实践 <一>

    1.建立   netcore  mvc 项目. 2.startup.cs 中添加服务 services.AddAuthorization(option=> { var requirements ...

  5. Ubuntu18.04安装MySQL与默认编码设置

    安装 打开终端直接开始,编码配置方法在后面 #通过apt更新包索引 sudo apt update #按照默认软件包安装 sudo apt install mysql-server #运行安全脚本 s ...

  6. Linux I2C核心、总线和设备驱动

    目录 更新记录 一.Linux I2C 体系结构 1.1 Linux I2C 体系结构的组成部分 1.2 内核源码文件 1.3 重要的数据结构 二.Linux I2C 核心 2.1 流程 2.2 主要 ...

  7. HTML给标题栏添加图标

    <link rel="icon" href="images/logo.icon" type="image/x-icon"> 也可 ...

  8. 基于SAML2.0的SAP云产品Identity Authentication过程介绍

    SAP官网的架构图 https://cloudplatform.sap.com/scenarios/usecases/authentication.html 上图介绍了用户访问SAP云平台时经历的Au ...

  9. 8.Spring整合Hibernate_2_声明式的事务管理(Annotation的方式)

    声明式的事务管理(AOP的主要用途之一) (Annotation的方式) 1.加入annotation.xsd 2.加入txManager bean 3.<tx:annotation-drive ...

  10. c中fgets与strlen

    fgets函数从文件读取'\n'并存储,在'\n'后再增加一个'\0'构成字符串. 但fgets函数需要指定读入的字符数,如果指定了n,则最多只能读取n-1个.fgets在读取了n-1个字符.读到了' ...