7. React 使用
2020-04-16 11:12:28 6 举报
AI智能生成
react
作者其他创作
大纲/内容
第7章 React 使用
7-1 React使用-考点串讲
React使用
1.基本使用-常用,必须会
2.高级特性-不常用,但体现深度
3.Redux和React-router使用
2.高级特性-不常用,但体现深度
3.Redux和React-router使用
7-2 JSX基本知识点串讲
JSX基本使用
1. 变量、表达式
2. class style
3. 子元素和组件
2. class style
3. 子元素和组件
7-3 JSX如何判断条件和渲染列表
条件判断
1. if else
2. 三元表达式
3. 逻辑运算符 && ||
2. 三元表达式
3. 逻辑运算符 && ||
和vue的v-if v-else不同
这里的条件判断直接写js
这里的条件判断直接写js
渲染列表
1. map
2. key
2. key
事件
1. bind this
2. 关于event参数
3. 传递自定义参数
2. 关于event参数
3. 传递自定义参数
7-4 React事件为何bind this
bind this
clickHandler1
this.clickHandler1 = this.clickHandler1.bind(this)
在constructor中绑定方法的this指向
在constructor中绑定方法的this指向
使用静态方法
clickHandler2
clickHandler2静态方法
使用静态方法,不需要绑定方法的this指向
使用静态方法,不需要绑定方法的this指向
7-5 React事件和DOM事件的区别
event
1. event 是 SyntheticEvent ,模拟出来 DOM 事件所有能力
2. event.nativeEvent 是原生事件对象
3. 所有的事件,都被挂载到 document 上
4. 和 DOM 事件不一样,和 Vue 事件也不一样
2. event.nativeEvent 是原生事件对象
3. 所有的事件,都被挂载到 document 上
4. 和 DOM 事件不一样,和 Vue 事件也不一样
传递参数
7-6 React表单知识点串讲
表单
1. 受控组件
2. input textarea select 用value
3. checkbox radio 用checked
2. input textarea select 用value
3. checkbox radio 用checked
input
input
受控组件,可以简单理解为,input受state控制
通过onChange手动修改state的值
通过onChange手动修改state的值
textarea
<textarea value={this.state.info} onChange={this.onTextareaChange}/>
select
<select value={this.state.city} onChange={this.onSelectChange}>
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="shenzhen">深圳</option>
</select>
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="shenzhen">深圳</option>
</select>
checkbox
<input type="checkbox" checked={this.state.flag} onChange={this.onCheckboxChange}/>
radio
<input type="radio" name="gender" value="male" checked={this.state.gender === 'male'} onChange={this.onRadioChange}/>
7-7 React父子组件通讯
组件使用
1. props传递数据
2. props传递函数
3. props类型检查
2. props传递函数
3. props类型检查
代码演示
List
List负责渲染
Input
父组件给input传递方法
子组件调用父组件的方法,修改父组件的state
子组件调用父组件的方法,修改父组件的state
1. 父组件可以给子组件传递数据,也可以传递方法
2. 在子组件中,通过this.props获取父组件传递的数据
3. 状态提升:react组件中,在公共的父组件中定义变量
2. 在子组件中,通过this.props获取父组件传递的数据
3. 状态提升:react组件中,在公共的父组件中定义变量
7-8 setState为何使用不可变值
setState
1. 不可变值(非常非常重要)
2. 可能是异步更新
3. 可能会被合并
2. 可能是异步更新
3. 可能会被合并
代码演示
不可变值
concat不影响原来的数组
push会改变原来的数组
push会改变原来的数组
slice不会改变原来的数组
7-9 setState是同步还是异步
1. 直接使用时异步的
2. setState回调中是同步的
3. 在setTimeout中是同步的
4. 在自己定义的 DOM 事件中是同步的
2. setState回调中是同步的
3. 在setTimeout中是同步的
4. 在自己定义的 DOM 事件中是同步的
代码演示
7-10 setState何时会合并state?
1. 传入对象,会被合并(类似 Object.assign)
2. 传入函数,不会被合并
2. 传入函数,不会被合并
代码演示
7-11 React组件生命周期
单个组件的生命周期
父子组件生命周期,和Vue的一样
7-12 React基本使用-知识点总结和复习
知识点
1. JSX基本使用
2. 条件
3. 列表
4. 事件
5. 表单
6. 组件和props
7. setState(面试必考)
8. 生命周期
2. 条件
3. 列表
4. 事件
5. 表单
6. 组件和props
7. setState(面试必考)
8. 生命周期
7-13 React函数组件和class组件有何区别
React高级特性
1. 函数组件
2. 非受控组件
3. Portals
4. context
5. 异步组件
6. 性能优化
7. 高阶组件 HOC
8. Render Props
2. 非受控组件
3. Portals
4. context
5. 异步组件
6. 性能优化
7. 高阶组件 HOC
8. Render Props
函数组件
1. 纯函数,输入props,输JSX
2. 没有实例,没有生命周期,没有state
3. 不能扩展其他方法
2. 没有实例,没有生命周期,没有state
3. 不能扩展其他方法
7-14 什么是React非受控组件
非受控组件
1. ref
2. defaultValue defaultChecked
3. 手动操作DOM元素
2. defaultValue defaultChecked
3. 手动操作DOM元素
使用场景
1. 必须手动操作DOM元素,setState实现不了
2. 文件上传<input type=file>
3. 某些富文本编辑器,需要传入DOM元素
2. 文件上传<input type=file>
3. 某些富文本编辑器,需要传入DOM元素
代码演示
受控组件 vs非受控组件
1. 优先使用受控组件,符合React设计原则
2. 必须操作DOM时,再使用非受控组件
2. 必须操作DOM时,再使用非受控组件
7-15 什么场景需要用React Portals
1. 组件默认会按照既定层次嵌套渲染
2. 如何让组件渲染到父组件以外?
2. 如何让组件渲染到父组件以外?
Portals使用场景
1. overflow:hidden
2. 父组件z-index值太小
3. fixed需要放在body第一层
2. 父组件z-index值太小
3. fixed需要放在body第一层
代码演示
7-16 是否用过React Context
context
使用场景:
1. 公共信息(语言、主题)如何传递给每个组件
2. 用props太繁琐(比如组件层级很深时,用props需要一层一层的传递,太麻烦)
3. 用redux小题大做
1. 公共信息(语言、主题)如何传递给每个组件
2. 用props太繁琐(比如组件层级很深时,用props需要一层一层的传递,太麻烦)
3. 用redux小题大做
代码演示
组件结构
三层组件:
第一层App
第二层Toolbar
第三层ThemeLink、ThemedButton
现在要把第一层组件的数据theme传递给第三层
第一层App
第二层Toolbar
第三层ThemeLink、ThemedButton
现在要把第一层组件的数据theme传递给第三层
数据
生产和管理数据
App
// 创建 Context 填入默认值(任何一个 js 变量)
const ThemeContext = React.createContext('light')
const ThemeContext = React.createContext('light')
<ThemeContext.Provider value={this.state.theme}>
<Toolbar />
<hr/>
<button onClick={this.changeTheme}>change theme</button>
</ThemeContext.Provider>
<Toolbar />
<hr/>
<button onClick={this.changeTheme}>change theme</button>
</ThemeContext.Provider>
<ThemeContext.Provider></ThemeContext.Provider>
管理和生产数据
管理和生产数据
消费数据
<ThemeContext.Provider></ThemeContext.Provider>的子组件都可以消费数据
Toolbar、ThemeLink、ThemedButton都具备消费数据的能力
Toolbar、ThemeLink、ThemedButton都具备消费数据的能力
class 组件如何消费数据
ThemedButton.contextType = ThemeContext
或者
static contextType = ThemeContext
或者
static contextType = ThemeContext
函数式组件如何消费数据
<ThemeContext.Consumer></ThemeContext.Consumer>
7-17 React如何异步加载组件
异步组件
1. import()
2. React.lazy
3. React.Suspense
2. React.lazy
3. React.Suspense
组件比较大时,或者路由懒加载时使用异步组件
代码演示
7-18 React性能优化-SCU的核心问题在哪里
性能优化
1. 性能优化,永远是面试的重点
2. 性能优化对React更加重要
3. 回顾setState的不可变值
2. 性能优化对React更加重要
3. 回顾setState的不可变值
1. shouldComponentUpdate(简称SCU)
2. PureComponent和React.memo
3. 不可变值immutable.js
2. PureComponent和React.memo
3. 不可变值immutable.js
SCU基本用法
这是一个可选的生命周期
默认返回true
默认返回true
通过对比前后的状态,
返回true时,会继续渲染
返回false,不会渲染
可以优化性能
返回true时,会继续渲染
返回false,不会渲染
可以优化性能
7-19 React性能优化-SCU默认返回什么
父组件更新,会重新触发render渲染,子组件就会渲染
代码演示
PropsDemo.js
Input 输入框组件
List 渲染列表组件
List 渲染列表组件
不使用SRC优化时,Input输入内容提交,Footer会跟着更新
React 默认:父组件有更新,子组件则无条件也更新!!!
性能优化对于 React 更加重要!
SCU 一定要每次都用吗?—— 需要的时候才优化
性能优化对于 React 更加重要!
SCU 一定要每次都用吗?—— 需要的时候才优化
7-20 React性能优化-SCU一定要配合不可变值
SCU一定要赔着不可变值
SCUDemo2
在List中做SCU优化
_isEqual会做数组和对象的深度比较,尽量把state层级减少
修改list时不可以使用push,它会改变list数组,导致setState前后list值相同
SCU中会判断两者相等,就不会重新渲染
SCU中会判断两者相等,就不会重新渲染
SCU使用总结
1. SCU默认返回true,即React默认重新渲染所有子组件
2. 必须配合'不可变值'一起使用
3. 可先不用SCU,有性能优化时再考虑使用
2. 必须配合'不可变值'一起使用
3. 可先不用SCU,有性能优化时再考虑使用
7-21 React性能优化-PureComponent和memo
PureComponent和memo
1. PureComponent,SCU中实现了浅比较
2. memo,函数组件中的PureComponent
3. 浅比较已适用大部分情况(尽量不要做深度比较)
2. memo,函数组件中的PureComponent
3. 浅比较已适用大部分情况(尽量不要做深度比较)
PureComponent
React.memo
areEqual是一个类似SCU的函数,把组件和类SCU函数传入React.memo中
7-22 React性能优化-了解immutable.js
immutable.js
1. 彻底拥抱‘不可变值’
2. 基于共享数据(不是深拷贝),速度好
3. 有一定学习和迁移成本,按需使用
2. 基于共享数据(不是深拷贝),速度好
3. 有一定学习和迁移成本,按需使用
性能优化-小结
1. 面试重点,且涉及React设计理念(不可变值)
2. SCU PureComponent React.memo immutable.js
3. 按需使用 & state层级
2. SCU PureComponent React.memo immutable.js
3. 按需使用 & state层级
7-23 什么是React高阶组件
关于组件公共逻辑的抽离
1. mixin,已被React弃用
2. 高阶组件 HOC(High Order Component)
3. Render Props
2. 高阶组件 HOC(High Order Component)
3. Render Props
高阶组件 基本用法
代码演示
7-24 什么是React Render Props
Render props
代码演示
HOC vs Render Props
1. HOC: 模式简单,但会增加组件层级,可能会出props漏传的情况
2. Render Props:代码简洁,学习成本较高
3. 按需使用
2. Render Props:代码简洁,学习成本较高
3. 按需使用
7-25 React高级特性考点总结
1. 函数组件
2. 非受控组件
3. portals
4. context
5. 异步组件
6. 性能优化(重要)
7. 高阶组件 HOC
8. Render Props
2. 非受控组件
3. portals
4. context
5. 异步组件
6. 性能优化(重要)
7. 高阶组件 HOC
8. Render Props
7-26 Redux考点串讲
Redux使用
1. 和Vuex作用相同,但比Vuex学习成本高
2. 不可变值,纯函数
3. 面试常考
2. 不可变值,纯函数
3. 面试常考
1. 基本概念
2. 单项数据流(经常考)
3. react-redux
4. 异步action(常考)
5. 中间件
2. 单项数据流(经常考)
3. react-redux
4. 异步action(常考)
5. 中间件
7-27 描述Redux单项数据流
基本概念
1. store state
2. action
3. reducer
2. action
3. reducer
https://www.redux.org.cn/
单项数据流概述
1. dispatch(action)
2. reducer->newState,用不可变值
3. subscribe触发通知,触发视图层更新
2. reducer->newState,用不可变值
3. subscribe触发通知,触发视图层更新
7-28 串讲react-redux知识点
react-redux
1. <Provider> connect
2. connect
3. mapStateToProps mapDispatchToProps
2. connect
3. mapStateToProps mapDispatchToProps
代码演示
7-29 Redux action如何处理异步
7-30 简述Redux中间件原理
7-31 串讲react-router知识点
7-32 React使用-考点总结
0 条评论
下一页