React 学习记录 2📝
生命周期
装载过程
constructor
componentWillMount
render
componentDidMount
constructor
它是 ES6 的构造函数,当创建一个有状态组件实例时,会自动调用 构造函数。
React 组件 需要构造函数的原因:
初始化 state
绑定成员函数 this 环境。 this 指向当前组件实例。
componentWillMount
componentWillMount
在 render 前 执行。一般不用 定义这个生命周期函数,因为
componentWillMount
发生在 将要装载 时,这时没有任何渲染出来。
render
所有 React 组件的 父类 React.Component 类 对除 render 之外的生命周期函数都有默认实现。
render
函数不做实际的渲染,它只是返回一个JSX
描述的结构,最终交给 React 来渲染
componentDidMount
componentDidMount
在render
后执行, 当componentDidMount
被调用时,组件已经被 装载到 DOM 树上了 。
React 核心概念
JSX
什么是
JSX
?
JSX
被称为JavaScript
的扩展,可以在JavaScript
中 写标签语法。
JSX
有哪些特性 ?
可以嵌入表达式
给标签加 特定属性
可以使用
JSX
来指定子元素
JSX
可以防止注入攻击
JSX
表示对象使用
JSX
在 单文件入口的
return
渲染 元素部分 使用{ }
来传入JSX
元素渲染原理
在
React
中 一个js
文件可以为一个组件,每个组件都必须有一个根元素DOM
节点来包裹内部元素,这个根DOM
由React DOM
来管理 。React 是由多个
DOM
元素来构成的 React 应用。如何将多个
React 元素
渲染到根节点呢?
把多个DOM 放到 ReactDOM.render()即可,这样一个完整的React应用就构成了
注意
React 元素一旦被创建,就无法更改内部元素和属性
, 想要更新的话, 再次调用ReatDOM.render()
React
只更新它变化的部分,React DOM
会对新的状态和旧的状态进行对比来更新。
组件探索
组件分类
函数组件
class 组件
函数组件
它接受唯一带有数据的
props
对象 并返回一个React
元素,它本质是一个JavaScript
函数。 在不需要状态数据管理时,使用。注意:
Props
为只读属性,不能修改
class 组件
class 组件
有自己的数据状态管理 (state
),而函数组件没有状态管理,它只能读(props
) 。
state
注意:
state
不能直接 修改, 必须通过this.setData( { } )
来修改。
state异步更新时, this.setData ( (satate, props) => { } )
接受的不是一个对象而是一个函数。
数据是向下流动的,可以在子组件上 传递该组件state数据,子组件通过 props 来接收使用
事件处理
React 事件的命名采用小驼峰式(camelCase),而不是纯小写。
使用 JSX 语法时你需要传入一个函数作为事件处理函数,而不是一个字符串。
向事件传递参数
<button onClick={this.changeNum.bind(this,id)}>修删除 </button>
<button onClick={(e) =>this.changeNum(23123123,e) }>删除</button>
条件渲染
在
React
中 根据条件来渲染一共有4
种方法
1.元素变量控制
2.与运算符&&控制
3.三目运算符控制
4. 隐藏组件显示
元素变量控制
定义一个变量来管理控制状态
根据状态变量来决定显示哪个组件被显示, 定义一个变量来存放显示的组件。
在页面中,直接通过
{ 存放组件的变量 }
与运算符&&控制
在 JavaScript 中,
true && expression
总是会返回expression
, 而false && expression
总是会返回false
。如果条件是
true
,&&
右侧的元素就会被渲染,如果是false
,React 会忽略并跳过它。
三目运算符控制
使用格式: { 状态 ? 组件1 : 组件2 }
隐藏组件
无状态组件通过接受传递过的 props , 根据 props 的状态来决定是否显示,不显示的话, 直接 return null
render
方法直接返回null
,而不进行任何渲染。
列表循环 key
受控组件
在
React
中,表单受控组件 都有自己的状态state
, 通过setDate
来更新自己的state
.受控组件有:
<input>
<textarea>
<select>
注意:
input , textarea 通过指定value 值,然后 通过 onChange 事件来更新组件的state
select 通过 value 来指定默认选中项,也可以多选,value为 数组即可
处理多个输入时,可以给 input 添加 name 属性,然后onChange 都指定为一个,就可以同时监听多个state,通过 e.target.name 来区分。
版权声明: 本文为 InfoQ 作者【程序员海军】的原创文章。
原文链接:【http://xie.infoq.cn/article/0ff8dbefeb613cfbff0c50353】。文章转载请联系作者。
评论