react 进阶hook 之 context Hook

简介: react context 上下文,相信大家都会使用。不会的可查看。详情的概念这里不介绍,只接受在函数组件中,使用context hooks 的使用

react context 上下文,相信大家都会使用。不会的可查看。详情的概念这里不介绍,只接受在函数组件中,使用context hooks 的使用


语法


const value = useContext(MyContext);


  • 接收一个参数,是一个上下文对象,需要使用 react.createContext这个对象


  • 返回的结果是consumer的结果


  • useContext(MyContext) 只是让你能够读取 context 的值以及订阅 context 的变化。你仍然需要在上层组件树中使用<MyContext.Provider>来为下层组件提供 context。


案例


原始写法


import React from 'react'
interface ICtxP {
  name: string,
  age: number
}
// 创建一个上下文,初始化值
const ctx = React.createContext<ICtxP>({name: 'twinkle', age: 18})
 // 文本组件
function TextComp(){
  return(
    <>
    <ctx.Consumer>
      {value => (
        <>
        <p>名字: {value.name}</p>
        <p>年龄: {value.age}</p>
        </>
      )}
    </ctx.Consumer>
    </>
  )
}
// 测试组件
export default function TestContextComp() {
  return (
    <div>
      <ctx.Provider value={{name: 'cll', age: 18}}>
        <TextComp/>
      </ctx.Provider>
    </div>
  )
}


原始写法的效果


20210407194116794.png


使用contextHook 写法


import React, { useContext } from 'react'
// 上下文数据的结构
interface ICtxP {
  name: string,
  age: number
}
// 创建一个上下文
const ctx = React.createContext<ICtxP>({ name: 'twinkle', age: 18 })
// 文本组件
function TextComp() {
  // 直接使用上下文hook
  const value = useContext(ctx);
  return (
    <>
      <p>名字: {value.name}</p>
      <p>年龄: {value.age}</p>
    </>
  )
}
export default function TextContextHook() {
  return (
    <div>
      <ctx.Provider value={{name: 'cll', age: 18}}>
      <TextComp/>
      </ctx.Provider>
    </div>
  )
}


效果


20210407194933209.png


结论


useContext 这个hooks 减少了myContext.consumer 结构的写法,防止多重上下文的嵌套,减少了代码量,但是myContext.provider 还是需要和原来的写法一样,估计在未来react 官方也会把这个给简化掉,毕竟 hooks 的目的就是使组件的结构更加的简单和纯粹

相关文章
|
17小时前
|
前端开发 API
React 之 Context 的变迁与背后实现
React 之 Context 的变迁与背后实现
30 0
|
16小时前
|
前端开发 JavaScript API
React的Context API:全局状态管理的利器
【4月更文挑战第25天】React的Context API解决了深层组件间状态共享的难题,提供全局状态管理方案。通过`Provider`和`Consumer`组件,或结合`useContext` Hook,实现状态在组件树中的传递。最佳实践包括避免过度使用,分离逻辑,以及在必要时与Redux或MobX结合。Context API简化了数据传递,但需谨慎使用以保持代码清晰。
|
16小时前
|
前端开发
深入理解 React 中的 Context(二)useContext、createContext
深入理解 React 中的 Context(二)useContext、createContext
|
16小时前
|
前端开发 JavaScript
【边做边学】React Hooks (二)——useEffect Hook
【边做边学】React Hooks (二)——useEffect Hook
|
16小时前
|
前端开发 JavaScript
React中useEffect Hook使用纠错
React中useEffect Hook使用纠错
19 0
|
16小时前
|
前端开发 中间件 数据安全/隐私保护
React路由进阶方法
React路由进阶方法
29 1
|
17小时前
|
前端开发
React中兄弟组件通信和组件跨级传递Context的使用
React中兄弟组件通信和组件跨级传递Context的使用
|
17小时前
|
前端开发
react的context状态树怎么使用
react的context状态树怎么使用
27 0
|
17小时前
|
自然语言处理 前端开发 JavaScript
说说你对 React Hook的闭包陷阱的理解,有哪些解决方案?
说说你对 React Hook的闭包陷阱的理解,有哪些解决方案?
52 0
|
5月前
|
自然语言处理 前端开发 JavaScript
美丽的公主和它的27个React 自定义 Hook(四)
美丽的公主和它的27个React 自定义 Hook(四)

热门文章

最新文章