Introduction to React
React入门
介绍
课程地址:阿里云React
课程PPT:React入门
课程代码:Github
官方文档:安装
运行准备
|
|
定义
具体是做UI组件的库,专注于MVC中的view
用状态控制组件变化
一个组件作为一个状态机,每一个状态对应组件中的一个UI
作用
- API少
- 组件内聚
- 原生组件和自定义组件融合渲染
- 状态/属性驱动全局更新
- commonjs生态圈/工具联链完善
基础知识
JSX
描述组件树
必须驼峰命名
属性名不能和js关键字冲突
|
|
|
|
可以通过{变量名}来将变量的值作为属性值
|
|
可以通过 {…obj} 来批量设置一个对象的键值对到组件的属性,注意顺序
|
|
EVENT
可以通过设置原生 dom 组件的 onEventType 属性来监听 dom 事件,在加强组件内聚性的同时,避免了传统 html 的全局变量污染
|
|
组合
可以像使用原生 dom 组件一样使用自定义的组件
|
|
自定义组件中可以通过this.props.children访问自定义组件的子节点
|
|
PROPS
通过 this.props 可以获取传递给该组件的属性值
通过定义getDefaultProps 来指定默认属性值
通过指定propTypes可以校验属性值的类型
|
|
STATE
组件内部状态
|
|
MIXIN
mixin 是一个普通对象,通过 mixin 可以在不同组件间共享代码
|
|
FORM
value/checked 属性设置后,组件变为受控组件,用户输入无效,除非程序去改变
1234567var Test = React.createClass({render(){return <input value='x' />}})React.render(<Test />,document.getElementById('container'))
textarea 的值要设置在 value 属性
select 的 value 属性可以是数组,不建议使用 option 的 selected 属性
input/textarea 的 onChange 用户每次输入都会触发(即使不失去焦点)。通过监听该事件再结合state来改变input的值。
1234567891011121314151617var Test = React.createClass({getInitialState(){return {value: 'asdf'}},onChange(e){this.setState({value:e.target.value})},render(){return <input value={this.state.value} onChange={this.onChange} />}})React.render(<Test />,document.getElementById('container'))
设置defaultValue为input的初始值,之后input的值由用户输入,不推荐
1234567var Test = React.createClass({render(){return <input defaultValue='x' />}})React.render(<Test />,document.getElementById('container'))
radio/checkbox 点击后触发 onChange
REF
该功能是为了结合现有非 react 类库,通过 ref/refs 可以取得组件实例,进而取得原生节点
|
|
COMPONENT API
构成API
React.createClass 定义组件时允许传入的配置
- getDefaultProps 得到默认属性对象
- propTypes 属性检验规则
- mixins 组件间公用方法
COMPONENT LIFECYCLE(构成生命周期)
React.createClass 定义时允许传入的函数,会在特定生命周期内调用
初次创建组件时调用
- getInitialState 得到初始状态对象
- render 返回组件树. 必须设置
- componentDidMount 渲染到 dom 树中是调用,只在客户端调用,可用于获取原生节点
组件的属性值改变时调用
- componentWillReceiveProps 属性改变调用
- shouldComponentUpdate 判断是否需要重新渲染
- render 返回组件树. 必须设置
- componentDidUpdate 渲染到 dom 树中是调用, 可用于获取原生节点
componentWillUnmount 组件从 dom 销毁前调用
|
|
TOP API
- React.createClass 创建组件类
- React.findDOMNode 从组件实例获取 dom 根节点
- React.render 渲染组件到 dom
- React.Children.* 操作 map/forEach children 工具类
实例
搭建评论应用
组件分解
顶层 CommentBox
- 评论列表 CommentList
- 单条评论 Comment
- 评论表单 CommentForm
步骤
顶层
|
|
嵌套
|
|
属性传递
|
|
使用 DOM 库 MARKED
|
|
|
|
数据分离
|
|
从服务器取得数据
|
|
|
|
评论表单
|
|
通知重新渲染
|
|