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 深入的更多相关文章

  1. React(JSX语法)-----JSX基本语法

    JSX------HTML tags vs React Components: 1.To render a html tag,just use lower-case tag names in JSX; ...

  2. 【go】脑补框架 Express beego tornado Flux reFlux React jsx jpg-ios出品

    http://goexpresstravel.com/ 今天 Express 的作者 TJ Holowaychuk 发了一篇文章,正式宣告和 Node.js 拜拜了,转向 Go 语言. Go vers ...

  3. 在react jsx中,为什么使用箭头函数和bind容易出现问题

    在之前的文章中,已经说明如何避免在react jsx中使用箭头函数和bind(https://medium.freecodecamp.o... 但是没有提供一个清晰的demo展示为什么要这样做. 现在 ...

  4. 在react jsx中使用if判断

    在react jsx中如果使用if判断,需要这样做 var loginButton; if (loggedIn) { loginButton = <LogoutButton />; } e ...

  5. Airbnb React/JSX 编码规范

    Airbnb React/JSX 编码规范 算是最合理的React/JSX编码规范之一了 内容目录 基本规范 Class vs React.createClass vs stateless 命名 声明 ...

  6. 学习 React(jsx语法) + es2015 + babel + webpack

    视频学习地址: http://www.jtthink.com/course/play/575 官方地址 https://facebook.github.io/react/ 神坑: 1.每次this.s ...

  7. React JSX语法说明

    原文:http://my.oschina.net/leogao0816/blog/379487 什么是JSX? 在用React写组件的时候,通常会用到JSX语法,粗看上去,像是在Javascript代 ...

  8. [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 ...

  9. 2. React JSX语法及特点介绍

    什么是JSX         JSX 是一种类 XML 语言,全称是 JavaScript XML .React 可以不使用 JSX来编写组件,但是使用JSX可以让代码可读性更高.语义更清晰.对 Re ...

  10. React JSX基本语法规则

    JSX基本语法规则: 遇到HTML(以 < 开头)标签,就用HTML规则解析: 遇到代码块(以 { 开头),就用JavaScript规则解析. 它允许HTML和JavaScript的混写. 注意 ...

随机推荐

  1. 转:handler.post 为什么要将thread对象post到handler中执行呢?

    转载网址:http://blog.csdn.net/fei0724/article/details/8664462在Android中使用Handler和Thread线程执行后台操作 对于线程的控制,我 ...

  2. 浅谈 PHP 与手机 APP 开发

    来源:http://www.thinkphp.cn/topic/5023.html 一.先简单回答两个问题: 1.PHP 可以开发客户端?答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 ...

  3. elementaryos5安装chrome,修复依赖

    1.首先去下载个chrome:https://www.google.cn/chrome/ 2.尝试安装chrome:sudo dpkg -i google-chrome-stable_current_ ...

  4. 理解async/await

    async 和 await 在干什么 任意一个名称都是有意义的,先从字面意思来理解.async 是“异步”的简写,而 await 可以认为是 async wait 的简写.所以应该很好理解 async ...

  5. 《Python游戏编程快速上手》——1.3 如何使用本书

    本节书摘来自异步社区<Python游戏编程快速上手>一书中的第1章,第1.3节,作者[美] Al Sweigart(斯维加特),李强 译,更多章节内容可以访问云栖社区"异步社区& ...

  6. 日日算法:Kruskal算法

    介绍 克鲁斯卡尔(Kruskal)算法是用来求出连通图中最小生成树的算法. 连通图:指无向图中任意两点都能相通的图. 最小生成树:指联通图的所有生成树中边权重的总和最小的树(即,找出一个树,让其联通所 ...

  7. flask学习笔记(二)

    一.视图函数的传参方式 修改前: 目标: 传参方式改成 途径: 通过request获取参数 注意:args并不是地点类型,而是dict的一个子类,如图: immutable意思是不可变 不可变的字典转 ...

  8. JAVA大数几算--HDU 2054 A == B ?

    Problem Description Give you two numbers A and B, if A is equal to B, you should print "YES&quo ...

  9. DP 60题 -3 HDU1058 Humble Numbers DP求状态数的老祖宗题目

    Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  10. CF1316C Primitive Primes

    CF1316C [Primitive Primes] 给出两个多项式\(a_0+a_1x+a_2x^2+\dots +a_{n-1}x^{n-1}\)和\(b_0+b_1x+b_2x^2+ \dots ...