React:JSX 深入
React入门的的时候,我们(我自己啦)喜欢都跟着例子来,用标签的语法写JSX,比如:<Mycomponent key={this.props.id} onClick={this.props.doSth} ></Mycomponent >
觉得真是在js里写html。
现在文档告诉我们,JSX这种写法呀,其实是React.createElement(component, props, ...children)的语法糖,就好像类是创建对象的语法糖一样。
三个参数分别是其类型、属性、子元素。子元素部分可以是嵌套的数组、对象或文本。如果没有子元素,其JSX语法可以直接写成<Mycomponent />
1.无论是JSX语法还是createElement函数,Mycomponent这个名字在当前作用域必须可见,否则无法解析。
2.JSX语法允许类js对象的点语法:
const MyComponents = {
DatePicker: function DatePicker(props) {
return <div>Imagine a {props.color} datepicker here.</div>;
}
}
如上,当一个模块当中包含多个组件的定义时,如果我们想取用其中的某个组件,可以用<MyComponents.DatePicker /> 来调用组件。毕竟MyComponents是以对象形式来聚合各个组件的定义的。这种方式也方便我们按类型/功用将组件进行分类。
3.用户自定义的组件要用首字母大写的方式命名,这是推荐的。这方便ianReact将之与原声的html标签区分。按照规范,原生html标签要小写。
4.自定义组件名不能用js表达式/变量,应当在使用如果需要按条件确定使用哪个组件,前先确定组件名再使用它。
const components = {
photo: PhotoStory,
video: VideoStory
};
function Story(props) {
// Correct! JSX type can be a capitalized variable.
const SpecificStory = components[props.storyType];
return <SpecificStory story={props.story} />;
}
5.JS表达式可以作为props传给组件,但必须用{}包裹。
6.将字符串当作props传给组件时,下面两种方式等价:
<MyComponent message="hello world" />
<MyComponent message={'hello world'} />
7.当一个变量未赋值却当作props传给组件时,默认为布尔值true。然而这是不推荐的。因为在ES6的对象简写语法把这种情况看作{autocomplete:autocomplete}
<MyTextBox autocomplete />
//等于
<MyTextBox autocomplete={true} />
8.可以用扩展操作符将对象的属性props给组件:
function App2() {
const props = {firstName: 'Ben', lastName: 'Hector'};
return <Greeting {...props} />;
}
然而这是不推荐的,因为可能会把不相关的多余属性传给组件。
9.在自定义组件的开始标签和闭合标签之间的内容,会被当作组件的props.chidlren。
10.JSX会自动清除一行收尾的空白、把多余的空行删掉,并把断行当作一个空格。
11.在自定义组件的标签内部,我们可以通过字符串字面量组合更多(自定义)标签,其实就是用JSX语法来组织。
12.JS表达式作为子内容children的情况:function Hello(props) { return <div>Hello {props.addressee}!</div>; }
文档给的例子都是作为标签内部的文本。
13.函数也可以作为子内容children:
return (
<Repeat numTimes={10}>
{(index) => <div key={index}>This is item {index} in the list</div>}
</Repeat>
);
代码第三行本身是一个数组,在{}中,用函数将它映射为一组html元素。所以,“函数作为子内容”本质上是“函数生成的元素作为子内容”。
14.Booleans, Null, and Undefined Are Ignored
意思是,如果内容为以上的值,将不作显示。
<div />
<div></div>
<div>{false}</div>
<div>{null}</div>
<div>{undefined}</div>
<div>{true}</div>
以上的结果都是一个空的div,作为js表达式的这几个值都不会被打印出来。
然而,数字0不一样,它会被打印。因此,如果遇到用数组的length来做判断,必须把它转化为布尔值,比如 arr.length>0。
15.如果我们想将js表达式{true|false|null|undefined} 中的这几个值打印出来,就得将它转化为字符,{String(true)}.
这几条记住就可以了。
React:JSX 深入的更多相关文章
- React(JSX语法)-----JSX基本语法
JSX------HTML tags vs React Components: 1.To render a html tag,just use lower-case tag names in JSX; ...
- 【go】脑补框架 Express beego tornado Flux reFlux React jsx jpg-ios出品
http://goexpresstravel.com/ 今天 Express 的作者 TJ Holowaychuk 发了一篇文章,正式宣告和 Node.js 拜拜了,转向 Go 语言. Go vers ...
- 在react jsx中,为什么使用箭头函数和bind容易出现问题
在之前的文章中,已经说明如何避免在react jsx中使用箭头函数和bind(https://medium.freecodecamp.o... 但是没有提供一个清晰的demo展示为什么要这样做. 现在 ...
- 在react jsx中使用if判断
在react jsx中如果使用if判断,需要这样做 var loginButton; if (loggedIn) { loginButton = <LogoutButton />; } e ...
- Airbnb React/JSX 编码规范
Airbnb React/JSX 编码规范 算是最合理的React/JSX编码规范之一了 内容目录 基本规范 Class vs React.createClass vs stateless 命名 声明 ...
- 学习 React(jsx语法) + es2015 + babel + webpack
视频学习地址: http://www.jtthink.com/course/play/575 官方地址 https://facebook.github.io/react/ 神坑: 1.每次this.s ...
- React JSX语法说明
原文:http://my.oschina.net/leogao0816/blog/379487 什么是JSX? 在用React写组件的时候,通常会用到JSX语法,粗看上去,像是在Javascript代 ...
- [React] Linting React JSX with ESLint (in ES6)
ESLint is a JavaScript linter (static analysis tool) that offers full support for ES6, JSX, and othe ...
- 2. React JSX语法及特点介绍
什么是JSX JSX 是一种类 XML 语言,全称是 JavaScript XML .React 可以不使用 JSX来编写组件,但是使用JSX可以让代码可读性更高.语义更清晰.对 Re ...
- React JSX基本语法规则
JSX基本语法规则: 遇到HTML(以 < 开头)标签,就用HTML规则解析: 遇到代码块(以 { 开头),就用JavaScript规则解析. 它允许HTML和JavaScript的混写. 注意 ...
随机推荐
- 用Python的Plotly画出炫酷的数据可视化(含各类图介绍,附代码)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 我被狗咬了 在谈及数据可视化的时候,我们通常都会使用到matplo ...
- 调用ocx ActiveX控件详解(做一个简单的ocx控件)
背景 最近做的项目都和插件有关,就是在页面中调用插件的方法,然后进行操作. 插件就是ocx ActiveX控件,具体的说明可以自己去了解一下,在这里就不做赘述. 具体调用方式很简单: 1.在页面中写一 ...
- Selenium常见报错问题(3)- 解决和分析NoSuchElementException
如果你在跑selenium脚本时,需要某些异常不知道怎么解决时,可以看看这一系列的文章,看看有没有你需要的答案 https://www.cnblogs.com/poloyy/category/1749 ...
- Android程序中Acticity间传递数据
在Android开发过程中,在不同的Acitivity之间传递数据的情况是非常常见的.我花费了一点时间来总结Acitivity之间的数据传递,记录下来. 1.简单传递键值对 这种传递方式非常简单,只需 ...
- pip安装openvc-python国内镜像源
采用清华大学的镜像源. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghu ...
- javaScript常用到的方法
判断一个对象是否为空对象,不为null,仅仅是{};可以使用如下方法判断: if (JSON.stringify(object) === '{}') { //.. } //也可以 if (Object ...
- 企业云桌面-03-安装第1个企业 CA-013-CA01
作者:学 无 止 境 QQ交流群:454544014 注意: <企业云桌面>系列博文是<企业云桌面规划.部署与运维实践指南>的基础部分,因为书中内容涉及非常多,非常全面,所以基 ...
- 搭建Springboot+mybatis+redis+druid
2019独角兽企业重金招聘Python工程师标准>>> 准备工作 JDK:1.8 使用技术:SpringBoot.Dubbo.Mybatis.Druid 开发工具:Intelj ID ...
- 日常开发中常用的linux命令
本文并不将linux的常用命令全部罗列出来,列出一下常用.容易忘记的命令. 更详细的说明见:https://www.cnblogs.com/xuxinstyle/p/9609551.html 文件相关 ...
- 在TX2上多线程读取视频帧进行caffe推理
参考文章:Multi-threaded Camera Caffe Inferencing TX2之多线程读取视频及深度学习推理 背景 一般在TX2上部署深度学习模型时,都是读取摄像头视频或者传入视频文 ...