安装
打开bash,输入git clone git@github.com:ruanyf/react-demos.git
Demo 子目录,每个目录都有一个 index.html 文件,在浏览器打开这个文件,就能立刻看到效
React 可以在浏览器运行,也可以在服务器运行
HTML模板
react.js 是 React 的核心库,react-dom.js 是提供与 DOM 相关的功能,Browser.js 的作用是将 JSX 语法转为 JavaScript 语法
最后一个script>标签的 type 属性为 text/babel 。这是因为 React 独有的 JSX 语法,跟 JavaScript 不兼容。凡是使用 JSX 的地方,都要加上 type=”text/babel”
|
|
实际上线的时候,应该将将 JSX 语法转为 JavaScript 语法放到服务器完成
将 src 子目录的 js 文件进行语法转换,转码后的文件全部放在 build 子目录
|
|
ReactDOM.render()
ReactDOM.render 是 React 的最基本方法,用于将模板转为 HTML 语言,并插入指定的 DOM 节点
|
|

JSX语法
JSX 的基本语法规则:遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;遇到代码块(以 { 开头),就用 JavaScript 规则解析
|
|

JSX 允许直接在模板插入 JavaScript 变量。如果这个变量是一个数组,则会展开这个数组的所有成员
|
|

组件
React 允许将代码封装成组件,然后像插入普通 HTML 标签一样,在网页中插入这个组件。React.createClass 方法就用于生成一个组件类
|
|
代码会报错,因为HelloMessage组件包含了两个顶层标签:h1和p
|
|

class 属性需要写成 className ,for 属性需要写成 htmlFor ,这是因为 class 和 for 是 JavaScript 的保留字
this.props.children
this.props.children属性表示组件的所有子节点
|
|

this.props.children 的值有三种可能:如果当前组件没有子节点,它就是 undefined
如果有一个子节点,数据类型是 object ;如果有多个子节点,数据类型就是 array
React.Children.map 来遍历子节点,而不用担心 this.props.children 的数据类型是 undefined 还是 object
PropTypes
组件的属性可以接受任意值,字符串、对象、函数等等都可以
组件类的PropTypes属性,就是用来验证组件实例的属性是否符合要求
|
|
getDefaultProps 方法可以用来设置组件属性的默认值
|
|
获取真实的DOM节点
组件并不是真实的DOM节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM
从组件获取真实DOM的节点,这时就要用到ref属性
|
|
this.state
React将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染 UI
|
|
this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性
表单
用户在表单填入的内容,属于用户跟组件的互动,所以不能用 this.props 读取
|
|
组件的生命周期
组件的生命周期分成三个状态
- Mounting:已插入真实 DOM
- Updating:正在被重新渲染
- Unmounting:已移出真实 DOM
React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数
- componentWillMount()
- componentDidMount()
- componentWillUpdate(object nextProps, object nextState)
- componentDidUpdate(object prevProps, object prevState)
- componentWillUnmount()
React 还提供两种特殊状态的处理函数
- componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用
- shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用
这些方法的详细说明,可以参考官方文档。下面是一个例子
|
|
Ajax
组件的数据来源,通常是通过Ajax请求从服务器获取,可以使用componentDidMount方法设置 Ajax 请求,等到请求成功,再用this.setState方法重新渲染UI
jQuery 完成 Ajax 请求,这是为了便于说明。React 本身没有任何依赖,完全可以不用jQuery,而使用其他库
|
|
把一个Promise对象传入组件
|
|