react重新渲染以及避免不必要的渲染

触发react重新渲染

类组件触发重新渲染

1、setState

2、context

3、props

4、forceUpdate

函数式组件重新渲染

1、useState

2、props

避免不必要的渲染

类组件避免不必要的渲染

1、React.PureComponent/shouldComponentUpdate

函数式组件避免不必要的渲染

1、React.memo

2、useMemo(缓存变量)

3、useCallback(缓存函数)

context在类组件和函数式组件中的使用

创建context对象

javascript 复制代码
import { createContext } from 'react'
const contextObj = createContext()
const { Provider, Consumer } = context

注入数据

javascript 复制代码
function APP() {

    ...
    ...
    ...

    return (
        <provide value={name: 'xiaoliu'}>
            <div></div>
        </Provide>
    )
}
类组件
javascript 复制代码
class Son2 extends Component {
  static contextType = context
  render() {
    const { name } = this.context
    return (
      <>
        我是Son,我拿到的数据是:{name}
      </>
    )
  }
}
函数式组件

1、通过Consume拿到数据

javascript 复制代码
const Son1 = () => {
  return (
    <Consumer>
      {({ name }) => (
        <div>
          我是Son,我拿到的数据是:{name}
        </div>
      )}
    </Consumer>
  )
}

2、 通过useContext 方式

javascript 复制代码
const Son3 = () => {
  const { name } = useContext(context)
  return (
    <div>
      我是Son1,我拿到的数据是:{name}
    </div>
  )
}
相关推荐
剪刀石头布啊4 分钟前
泛洪DFS、BFS
前端
qetfw4 分钟前
Windows Server AD CS:根 CA、Web 证书模板与域内自动注册
前端·windows·windows-server
剪刀石头布啊5 分钟前
为什么React组件很少前缀,而vue的不少组件都有前缀
前端
剪刀石头布啊10 分钟前
gird网格布局
前端
啃火龙果的兔子12 分钟前
Google Chrome(谷歌浏览器)常用快捷键
前端·chrome
剪刀石头布啊14 分钟前
js真的是单线程实现异步并发么?
前端
剪刀石头布啊19 分钟前
js中改变this指向的操作有哪些
前端
剪刀石头布啊19 分钟前
vue、react 列表中使用 index 作为 key 的话,修改某一个元素后会发生什么
前端
方方洛21 分钟前
glowglow:语言无关的语法高亮器是怎么实现的
前端·前端框架
java_nnnn1 小时前
JavaEE进阶-HTML基础认识
前端·java-ee·html