React中context的用法

1.使用context

  • 首先要引入 React 内置的 React Context API 📦
  • 然后创建 provider
  • 最后创建 consumer,函数式组件使用hook可以不用创建consumer

2.文件目录

在这里插入图片描述

3.使用createContext创建context

// context -> index.jsx
import { createContext } from 'react'

export default createContext({})

4.使用Provider将context传递给子孙组件

被Provider包裹的所有组件不管层次多深,都可以取得value值
// home -> index.jsx
import ListContext from '../../context'
import TodoList from './Table'

const { Provider } = ListContext

return (
    <Div id="table">
      <Div id="header">
        <Button onClick={Logout}>Logout</Button>
      </Div>
      <Provider value={{ todoList, setTodoList }}>
        <Div id="box">
          <Input id="searchInput" onChange={(e) => { setSearch(e.target.value) }}></Input>
          <Button id="searchBtn" onClick={searchItems}>Search</Button>
          <Dialog />
        </Div>
        <TodoList />
      </Provider>
    </Div>
  )

5.子孙组件接收祖组件的数据

// home -> table -> index.jsx
import React, { useContext } from 'react'
import ListContext from '../../../context'

let ListContextValue = useContext(ListContext)
const { todoList, setTodoList } = ListContextValue

6.总结

使用Context可以避免组件的层层props嵌套的问题。但是它使用consumer拿值时,会多一层组件。得益于useContext hook我们可以不使用consumer组件,直接拿到值。一般的使用场景,如拿全局的class前缀,或者国际化,Ui主题颜色等。

当 Provider 的 value 值发生变化时,它内部的所有消费组件都会重新渲染。Provider 及其内部 consumer 组件都不受制于 shouldComponentUpdate 函数,因此当 consumer 组件在其祖先组件退出更新的情况下也能更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值