React Context API

在复杂的React项目中,ContextAPI提供了一种替代props逐级传递的方法,通过创建公共接口,允许不同层级的组件直接获取所需状态,简化了组件间通信,提高了开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Context API提出的背景

在React.Context API提出以前,使用React进行项目开发时,组件间的通信主要是依赖于props属性将父级组件的props逐级传递到子组件,如下图1所示。当项目比较复杂,组件嵌套过多时,逐级进行通信不仅效率低(顶级组件的state修改可能会引发多个state的变更,从而需要调用多次setState),而且难以管理和溯源,底层组件所调用的props需要一级级反向查找才能明确来源。这对项目的开发和管理带来一定的不便利性。
图片来源:https://mp.weixin.qq.com/s/ii6H6mhe2OAUf7RquVxN8g
Context的出现在一定程度上缓解了该问题,其原理如下图所示。Context就像一个公共接口一样,不同层级的组件都可以从Context中获取需要的props。Context使用了生产者-消费者模式,具体使用方法如下:

在这里插入图片描述

// vehicleContext.js -- 创建Context实例 
import React from 'react'

const VehicleContext = React.createContext({});
export const VehicleProvider = VehicleContext.Provider;
export const VehicleConsumer = VehicleContext.Consumer;
// index.js --  组件关系: Vehicle -> Car -> Audi
import React from 'react'
import { render } from 'react-dom'

import { Vehicle } from './vehicle.js';

function App () {
	return <Vehicle/>
}
render(<App/>, document.getElementById('root'))
// vehicle.js
import React from 'react';
import { VehicleProvider, VehicleConsumer } from './vehicleContext.js';

export class Vehicle extends React.Component {
	constructor (props) {
		super(props);
		this.state = {
			action: 'transport'
		}
	}
	render () {
		return (
		<VehicleProvider value={this.state.action}>
			<Car/>
		</VehicleProvider>
		)
	}
}

const Car = () => {
	return <Audi/>
}

const Audi = () => {
	return <VehicleConsumer>{context => <div>{context}</div>}</VehicleConsumer>
}

具体代码可以移步这里


参考文献:

  1. https://mp.weixin.qq.com/s/ii6H6mhe2OAUf7RquVxN8g
  2. http://react.html.cn/docs/context.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Neil-

你们的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值