当前位置: 首页 > news >正文

react hooks useContext

const context = useContext(conntext)

数据共享的api

通常使用redux mobx dva实现

conntext 是react 提供的实现数据共享的api . 解决props层层传递的问题

1.React.createConntext()创建Context对象

2.使用Context Provider 包裹组件 给他的后代组件提供数据

3.Context Provider所有的后代组件,都可以通过

Context.Consumer获取到Context数据

 

1.创建Context = React.createContext()

// 可以传递参数

2.使用Context.Provider包裹组件

<Context.Provider value={store}>

<MyComponnent />

</Context.Provider>

3. 使用Context.Consumer 获取共享数据

业务组件可以获取到这个store状态值了

<Context.Consumer>

{value=>{

// value就是通过context 共享的数据 这里是store

}

}

</Context.Consumer>

 

 

useContext(context)

useContext(context)是针对context(上下文)提出的api

它接受React.createContext()的返回结果作为参数

也就是context对象 并返回最近的context

使用useContext 将不再需要Provider和Consumer

当最近的context更新时,那么使用该conntext的hook将会重新渲染

基本使用

const Context =React.createContext({loadinng:false,name:'jack'})

组件1

const OnePage=()=>{

const ctx = userContext(Context);

return

(<div>{ctx.loading&&"Loading..."}</div>)

}

// 每个组件都可以这样使用

组件中引入其他组件

传递Context 数据

<MainPage Context = { Context} / >

//这样还是一层层传递的 所以需要使用暴露的方式导出去

 

MainPage组件

import React,{useContext} from 'react'

export default ({Conntext})=>{

// import引入的话 这个就不用写了传入参数

const ctx = useContext(Context);

// 使用这个数据 上层传递的数据 。 类似props

console.log(ctx)

return (

<div>

main 组件

</div>

)

}

之前无状态组件 函数组件传递参数 通过状态管理机 mobx redux dva实现的

也可以通过暴露的方式引入

import {Context} from './index'

index.js导出

export const Context = React.createContext({

loadinng:false,

name:'jack'

})

// 这样导出 子组件 import

 

// 封装单独模块的方式 把context 放进去

src下创建store

index.js

import React from 'react'

const Context = React.createContext({

loadinng:false,

name:'jack'

})

export default Context

暴露出去

外部使用

import Context from '../../store'

全局状态管理

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

  • 使用Flash Lite 制作手机主题
  • react hooks 规则以及自定义hooks的实现
  • react hooks reducer
  • react hooks 额外的钩子函数
  • 《程序员》杂志06年2月文章:Flash Lite挑战J2ME
  • CSDN Blog升级公告
  • koa文件上传2
  • 怎样成为一个Flash Lite Developer (开发篇)
  • Chat room help file
  • 小程序 - 使用async出现regeneratorRuntime is not defined错误 不能使用async 和await 的解决方案
  • react willReceiveProps 是深度比较 浅层拷贝 (虽然值变过来了 但是)还是会render 一次 immutable1
  • 怎样成为一个Flash Lite Developer (工具篇)
  • immutable与可变数据 不可变数据
  • 辞职:也要像个君子般离开
  • redux connect 原理解析 传入的mapstate 和mapdispatch connect()第一次执行后返回一个函数 这个函数接收到的参数是一个组件 对组件进行加工返回
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • export和import的用法总结
  • scala基础语法(二)
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 浮动相关
  • 关于springcloud Gateway中的限流
  • 关于字符编码你应该知道的事情
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何合理的规划jvm性能调优
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 跳前端坑前,先看看这个!!
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 应用生命周期终极 DevOps 工具包
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • %@ page import=%的用法
  • (10)ATF MMU转换表
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 4.0中的泛型协变和反变
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .net中我喜欢的两种验证码
  • .pop ----remove 删除
  • /var/spool/postfix/maildrop 下有大量文件
  • @Builder用法
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • []C/C++读取串口接收到的数据程序