React 基础篇(七)—— Context

render() {

return ;

}

}

使用 context ,就可以避免通过中间元素传递 props

// Context 可以让我们无须明确地传遍每一个组件,就能将值深入传递进组件树。

// 为当前的 theme 创建一个 context(“light”为默认值)。

const ThemeContext = React.createContext(‘light’);

class App extends React.Component {

render() {

// 使用一个 Provider 来将当前的 theme 传递给以下的组件树。

// 无论多深,任何组件都能读取这个值。

// 在这个例子中,我们将 “dark” 作为当前的值传递下去。

return (

<ThemeContext.Provider value=“dark”>

</ThemeContext.Provider>

);

}

}

// 中间的组件再也不必指明往下传递 theme 了。

function Toolbar(props) {

return (

);

}

class ThemedButton extends React.Component {

// 指定 contextType 读取当前的 theme context。

// React 会往上找到最近的 theme Provider,然后使用它的值。

// 在这个例子中,当前的 theme 值为 “dark”。

static contextType = ThemeContext;

render() {

return ;

}

}

Context 主要应用场景在于很多不同层级的组件需要访问同样的一些数据。如果只是想避免层层传递一些属性,组件组合会比 context 更好。

相关的API


React.createContext

const MyContext = React.createContext(defaultValue);

创建一个 Context 对象,当 React 渲染一个订阅了这个 Context 对象的组件,这个组件会从组件树中离自身最近的那个匹配的 Provider 中读取到当前的 context 值。只有当组件所处的树中没有匹配到 Provider 时,其 defaultValue 参数才会生效。

Context.Provider

<MyContext.Provider value={/* 某个值 */}>

每个 Context 对象都会返回一个 Provider React 组件,它允许消费组件订阅 context 的变化。Provider 接收一个 value 属性,传递给消费组件,一个 Provider 可以和多个消费组件有对应关系。多个 Provider 也可以嵌套使用,里面的会覆盖外层的数据。

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

需要注意的是,新旧值的变化通过 Object.is 一样的算法来完成的。

Class.contextType

class MyClass extends React.Component {

componentDidMount() {

let value = this.context;

/* 在组件挂载完成后,使用 MyContext 组件的值来执行一些有副作用的操作 */

}

componentDidUpdate() {

let value = this.context;

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值