react须知
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,如下:
React.createElement(component, props, ...children) // 返回一个js对象,含有type,props等属性。然后等待被ReactDom.render渲染成真实DOM。
2.两种组件都要求首字母大写
React会将以小些字母开头的组件视为原生DOM标签。所以自定义组件名必须以大写字母开头!!
当小写字母时,第一个参数被解析成字符串。
当大写字母时,将其解析成Class或者函数组件。
3. jsx的{}不能运行语句
jsx代码分为js标签和{}; 后者要求里面是表达式或者变量。
语句没有返回值。
<div>
{text}
</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算法(同级同类型比较)的性能优化。
<div>
{
([1,2,3]).map(item => <span key={item}>{item}</span>)
}
</div>
同级先比较key值,如果key值相同,再比较类型和属性等。如果都相等就不需要删除新增元素。依次比较。
如果最后所有元素都相同,只是位置发生变化,那么只需要更换元素位置;不需要删除重建。提高性能。
2. key属性只传递给React
不会传递给组件。所以在props对象中,props.key读取不到, 返回undefined。
6.style属性
有两个{};外层括号表示是表达式括号;内部表示是个对象。
<div style={{color: red}}>
style属性
</div>
7.html字符串模版渲染
<div dangerouslySetInnerHTML={{_html: '<input />'}}>
// 使用dangerouslySetInnerHTML属性渲染字符串模版
// 否则直接渲染成字符串
</div>
8. Props只读
react有一个严格的规则: 必须像纯函数一样保证他们的props不被修改。
9. 不能渲染的数据
true,false, undefined, null都不能渲染。
<div />
<div></div>
<div>{false}</div>
<div>{null}</div>
<div>{undefined}</div>
<div>{true}</div> // 全部等价
但是对于运算符表达式返回布尔值,但是本身不是布尔值的,还是可以渲染。
<div>
{
this.state.data.length && <div>sth</div>
}
</div>
// 如果值是[],length为0,虽然表达式是false,但是本身还是渲染0
// 应该
<div>
{
this.state.data.length > 0 && <div>sth</div>
}
</div>
react须知的更多相关文章
- 【转载】React初学者入门须知
http://www.oschina.net/news/75530/9-things-every-reactjs-beginner-should-know react.js入门学习 看了一遍,没什么特 ...
- React版本更新及升级须知(持续更新)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 18.0px "PingFang SC Semibold& ...
- 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo
前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...
- 谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo
前言 前端已经过了单兵作战的时代了,现在一个稍微复杂一点的项目都需要几个人协同开发,一个战略级别的APP的话分工会更细,比如携程: 携程app = 机票频道 + 酒店频道 + 旅游频道 + ..... ...
- React学习、安装及QuickStart
首先看的是这个页面 http://www.cocoachina.com/webapp/20150721/12692.html 这里有个内容差不多的版本(精华版):http://www.cnblogs. ...
- react入门学习及总结
前言 不知不觉一年又过去了,新的一年又到来,2019应该要好好思考,好好学点有用的东西,规划下自己今后的学习方向,不要再像以前那样感觉很迷茫. react简单介绍 官网及中文文档 https://re ...
- React的组件
React的组件化思想尤为明显,一切皆组件,觉着比Vue的组件化思想更加凸显. const PacketBG = (props) =>( <div className="pack ...
- Mock平台3-初识Antd React 开箱即用中台前端框架
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 内容提要 首先说下为啥这次测试开发系列教程前端选择Antd React,其实也是纠结对比过最终决定挑战一把,想法大概有几下几点: 笔者自己 ...
- react组件的生命周期
写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...
随机推荐
- IT学习的计算机网络内容
1.一种结构:数据结构 参考书目:<大话数据结构>.<数据结构(C#语言描述)>.<剑指Offer> ①线性表部分: 线性表(上){ 数组.ArrayList } ...
- (十二)springMvc 处理图片,视频等文件的上传
文章目录 导包 修改表单类型 配置解析器 处理上传的图片 补充一个自己写的工具类 导包 需要导入如下的包 commons-fileupload-1.3.3.jar commons-io-2.6.jar ...
- 欢迎使用f MWeb
MWeb 是专业的 Markdown 写作.记笔记.静态博客生成软件,目前已支持 Mac,iPad 和 iPhone.MWeb 有以下特色: 软件本身: 使用原生的 macOS 技术打造,追求与系统的 ...
- 标准库中最值得关注的两个 装饰器是 lru_cache 和全新的 singledispatch(Python 3.4 新增)
clock 装饰器 def clock(func): @functools.wraps(func) def clocked(*args, **kwargs): t0 = time.perf_count ...
- element-ui组件dialog遇到form
Vue.js似乎成了一种潮流. UI框架element-ui也跟着成了一种潮流,不过得承认,至少我个人还是非常认可的,element-ui做的是真不错. 用到element-ui,那么在dialog中 ...
- 11-MySQL DBA笔记-MySQL的监控
第11章 MySQL的监控 为什么我们需要监控呢?因为如果没有了监控,那么我们的服务可用性就无从度量,我们也无法及时地发现问题和处理问题.一个完善的监控体系,不仅需要进行实时的监控,也需要分析历史的监 ...
- 3-MySQL DBA笔记-开发基础
第二部分 开发篇 本篇首先讲述数据库开发的一些基础知识,如关系数据模型.常用的SQL语法.范式.索引.事务等,然后介绍编程开发将会涉及的数据库的一些技巧,最后结合生产实际,提供一份开发规范供大家参考. ...
- Jmeter4.0---- 测试数据说明(17)
1.说明 jmeter工具对于请求的测试结果,有多种形式展现,但是数据比较难懂,现在针对不同的展现做具体的说明. 2.监听器 (一)图形结果 (1)样本数目:总共发到服务器的请求数 (2)最新样本:服 ...
- SpringCloud 随笔
目录 服务间通讯 统一配置中心 RabbitMQ Spring Cloud Stream 服务网关 Spring Cloud Zuul ++==(纯手打,代码可能有错!)==++ 服务间通讯 Rest ...
- Lab2 Report
1.安装SeleniumIDE插件 a)安装Firefox 17.0 - 56.*版本的firefox,下载地址为:http://ftp.mozilla.org/pub/firefox/release ...