• React源码阅读指引

"dependencies": {"fbjs": "^0.8.16","loose-envify": "^1.1.0","object-assign": "^4.1.1","prop-types": "^15.6.0"
},

4个依赖库
index.js 环境变量检查
‘use strict’;

if (process.env.NODE_ENV === 'production') {module.exports = require('./cjs/react.production.min.js');
} else {module.exports = require('./cjs/react.development.js');
}


利用ES6的Symbol定义唯一标识。

Why React?

Facebook投入人力、财力等各种资源,稳定;有大型项目实例,有经验。

什么是JSX

JSX是React的核心组成部分,它使用XML标记的方式去直接声明界面,界面组件之间可以互相嵌套。
JSX=JavaScriptXML
JSX可以理解为在JS中编写与XML类似的语言(与XML有本质上的不同),它的目的不是要在浏览器或者引擎中实现,也不是把其加入ECMAScript标准。它的目的是通过各种编译器将这些标记编译成标准的JS语言。
JSX是:

  • 基于ECMAScript的一种新特性(并不是一种新语言)
  • 一种定义带属性树结构(DOM结构)的语法

JSX不是:

  • XML或者HTML
  • 一种限制 (你不需要为了 React 使用 JSX,可以直接使用纯粹的 JS。但更建议使用 JSX ,
    因为它能定义简洁且我们熟知的包含属性的树状结构语法。)

JSX的特点:

  • 类XML语法容易接受,结构清晰
  • 增强JS语义
  • 抽象程度高,屏蔽DOM操作,跨平台
  • 代码模块化

JSX并不是新语言,也没有改变JavaScript的语法,只是对JavaScript的拓展。

JSX语法

JSX本身就和XML语法类似,可以定义属性以及子元素。唯一特殊的是可以用大括号来加入JavaScript表达式,例如

class HelloMessage extends React.Component {render() {return <div>Hello {this.props.name}</div>;}
}
ReactDOM.render(<HelloMessage name="worldsong"/>,document.getElementById('root')
);

一、元素名斜体样式

自定义出的组件标签名,React 的 JSX 里约定分别使用首字母大、小写来区分本地组件的类和 HTML 标签。render渲染时,会把大写的组件名定义为自定义组件,把小写的组件名定义为HTML自带的标签名进行渲染。
var HelloMessage =
JSX的标签与函数名都是使用的驼峰命名

  • html For和className
    for和class为js的保留字,在书写for与class时需要修改为htmlFor何className,注意都是使用的驼峰命名。
  • 自闭合标签
    在 JSX 中, <MyComponent /> 是合法的,而 <MyComponent>就不合法。 所有的标签都必须闭合,可以是自闭和的形式,也可以是常规的闭合。
    注意:所有 React component 都可以采用自闭和的形式,包括div等
    二、节点属性
    如果往原生 HTML 元素里传入 HTML 规范里不存在的属性,React 不会显示它们。如果需要使用自定义属性,要加 data- 前缀。
<div data-custom-attribute="foo" />

然而任意属性支持自定义元素

<x-my-component custom-attribute="foo" />`

要使用 JavaScript 表达式作为属性值,只需把这个表达式用一对大括号 ( { } ) 包起来,不要用引号 ( " " )。
求值表达式本身与JSX没有多大关系,是JS中的特性。它是会返回值的表达式,与语句有本质上的不同,在编写JSX时,在 { } 中不能使用语句(if语句、for语句等等)。我们不能直接使用语句,但可以把语句包裹在函数求值表达式中运用。建议把函数表达式独立出来,在 { } 调用。

  • 条件判断的写法

你没法在JSX中使用 if-else 语句,因为 JSX 只是函数调用和对象创建的语法糖。在 { } 中使用,是不合法的JS代码,不过可以采用三元操作表达式

class HelloMessage extends React.Component {render() {return <div>Hello {this.props.name ? this.props.name : "World"}</div>;}
}
ReactDOM.render(<HelloMessage />,document.getElementById('root')
);

可以使用比较运算符“ || ”来书写,如果左边的值为真,则直接返回左边的值,否则返回右边的值,与if的效果相同。

class HelloMessage extends React.Component {render() {return <div>Hello {this.props.name || "World"}</div>;}
}
ReactDOM.render(<HelloMessage />,document.getElementById('root')
);

也可以使用变量来书写

class HelloMessage extends React.Component {getName() {if (this.props.name)return this.props.nameelsereturn "world"}render() {var name = this.getName();return <div>Hello {name}</div>;}
}
ReactDOM.render(<HelloMessage />,document.getElementById('root')
);

其中可以把变量去掉,直接在 { } 中调用函数

render() {return <div>Hello {this.getName()}</div>;
}
  • 函数表达式
    ( )有强制运算的作用
class HelloMessage extends React.Component {render() {return <div>Hello {(function (obj) {if (obj.props.name)return obj.props.nameelsereturn "World"}(this))}</div>;}
}
ReactDOM.render(<HelloMessage name={"worldsong"} />,document.getElementById('root')
);

外括号“ )”放在外面和里面都可以执行。唯一的区别是括号执行完毕拿到的是函数的引用,然后再调用;括号放在外面的时候拿到的事返回值。需传入(this)。

四、注释

JSX 里添加注释很容易;它们只是 JS 表达式而已。你只需要在一个标签的子节点内(非最外层)小心地用 { } 包围要注释的部分。

var content = (<Nav>{/* 一般注释, 用 {} 包围 */}<Person/* 多行注释 */name={window.isLoggedIn ? window.name : ''} // 行尾注释/></Nav>
);

五、样式
尽管在大部分场景下我们应该将样式写在独立的CSS文件中,但是有时对于某个特定组件而言,其样式相当简单而且独立,那么也可以将其直接定义在JSX中。在JSX中使用样式和真实的样式也很类似,通过style属性来定义,但和真实DOM不同的是,属性值不能是字符串而必须为对象,需要注意的是属性名同样需要驼峰命名法。例如:

var style = {color : "red",border : "1px solid #000"
}
class HelloMessage extends React.Component {render() {return <div>Hello {this.props.name}</div>;}
}
ReactDOM.render(<div style={style}><HelloMessage name="worldsong"/></div>,document.getElementById('root')
);

## React《 深入JSX》相关推荐

  1. [react] 在JSX中如何写注释?

    [react] 在JSX中如何写注释? {/* A JSX comment */} 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一起 ...

  2. React中JSX的理解

    React中JSX的理解 JSX是快速生成react元素的一种语法,实际是React.createElement(component, props, ...children)的语法糖,同时JSX也是J ...

  3. react 注释html,React之JSX语法

    React发明了JSX,利用HTML语法来创建虚拟DOM.React的核心机制之一就是可以在内存中创建虚拟的DOM元素.以此来减少对实际DOM的操作从而提升性能. JSX 即Javascript XM ...

  4. react中jsx行内样式(style)的国定写法、jsx双花括号{{}}写法的解释

    共index.js.index.html. TodoList.js这三个文件,主要看TodoList.js中的Input标签的style样式双花括号{{}}的写法,会在下方做全面的解释 运行效果: i ...

  5. React基础-JSX语法介绍

    文章目录 JSX语法介绍 认识JSX语法 JSX注释编写 JSX语法介绍 认识JSX语法 我们先来看一段代码 // 定义根组件 const element = <div>Hello Wor ...

  6. tsconfig.json 配置 update `jsx: “react“` into `jsx: “react-jsx“`终端警告

    使用 umiJS 时出现的终端警告: WARN [WARN] update jsx: "react" into jsx: "react-jsx" to supo ...

  7. React学习笔记一(React入门+JSX+脚手架)

    文章目录 1. React介绍和特点 1.1 React是什么 1.2 React的特点 2. React的开发依赖 2.1 React的三个依赖 2.2 Babel和React的关系 2.3 Rea ...

  8. React学习--- JSX的学习

    React学习- JSX 1.概述 ​ JSX 是 React 的核心组成部分,它使用 XML 标记的方式去直接声明界面,界面组件之 间可以互相嵌套.可以理解为在 JS 中编写与 XML 类似的语言, ...

  9. react中 JSX介绍-基本使用

    JSX是什么 JSX:是 JavaScript XML的缩写. 在 JS 代码中书写 XML 结构 注意:JSX 不是标准的 JS 语法,是 JS 的语法扩展.脚手架中内置了 @babel/plugi ...

  10. React中jsx的规则

    jsx语法规则:1.定义虚拟DOM时,不要写引号.2.标签中混入JS表达式时要用{}.3.样式的类名指定不要用class,要用className.4.内联样式,要用style={{key:value} ...

最新文章

  1. java随机产生字母排序_Java生成含字母和数字的6位随机字符串
  2. 几种常见的攻击方式扫盲(一)——NTP反射放大
  3. mybatis 需要注意的点 MyBatis 插入空值时,需要指定JdbcType (201
  4. Fastjson的基本使用方法大全
  5. mysql 去重_mysql 去重留一
  6. 一种简易的聊天泡泡设置颜色以及添加描边的方式
  7. 差速移动机器人之位姿整定
  8. 关于40G/100G高速PHY的测试
  9. Mysql replace 与 insert on duplicate效率分析
  10. Open CV leaning
  11. c语言静态数组是什么意思,C语言静态数组实现栈操作
  12. C语言贪吃蛇小游戏 | 源码
  13. Camera2 camera i2c总线协议介绍
  14. (绿色)修正版gooflow流程解决方案(源码分享+在线演示+UI地址下载)
  15. Arduino连接HC05蓝牙模块
  16. 学会这几点,你会成为一名月薪过万的Java程序员
  17. 2018 *精读书单 -选读
  18. android厨房的使用方法,懒人生活的福音:Android在厨房_软件资讯技巧应用-中关村在线...
  19. 骨干是折腾出来的 读书笔记10
  20. 消息称GPhone今日发布 揭秘幕后教父(图)

热门文章

  1. 【杂谈】除了生成图像(造假),GAN如何给目标检测,图像分割,图像增强等问题打辅助?...
  2. 短视频APP开发行业,你了解多少?
  3. Swift 实践之绘画
  4. Gitee 宣布开源须人工审核,大量开源项目被转为私有!
  5. 微信小游戏----HTML学习脚本(1)
  6. Win7共享勾选保存凭据,重启后失效的解决方法
  7. rtx3060和gtx1080选哪个rtx3060和gtx1080差距
  8. Cocos本周招聘汇总帖
  9. 微信小程序一键呼叫(电话可以多个,用户选一个)
  10. 理解绘制系统,记住四点就够了 | GAMES104实录 - 现代游戏引擎:从入门到实践