useContext
是 React 中的一个 Hook,它允许组件访问 React 上下文。React 上下文提供了一种在组件树中共享数据的方式,而不需要手动通过 props 逐层传递。当上下文中的数据发生变化时,所有使用该上下文的组件都会重新渲染。
useContext
,可以避免多层组件间通过 props 传递数据的繁琐。useContext
主要接受两种类型的参数:
Provider
和 Consumer
(在 React 16.8 之后,Consumer
已被废弃,推荐使用 Hooks)。useContext
可以接受任何类型的值作为参数,但通常是一个对象或函数。当使用 useContext
时,有时会遇到组件等待上下文更改而无法及时更新的情况。
这通常是因为 React 的渲染机制导致的。当上下文值发生变化时,React 会重新渲染所有使用该上下文的组件。但如果上下文值的更新依赖于异步操作(如 API 请求),则可能会出现等待的情况。
useEffect
监听上下文变化:通过 useEffect
钩子监听上下文的变化,并在变化时执行相应的操作。import React, { useContext, useEffect, useState } from 'react';
const MyContext = React.createContext();
function MyComponent() {
const [data, setData] = useState(null);
const contextValue = useContext(MyContext);
useEffect(() => {
// 监听上下文变化
if (contextValue !== null) {
setData(contextValue);
}
}, [contextValue]);
return (
<div>
{data ? <p>{data}</p> : <p>Loading...</p>}
</div>
);
}
export default MyComponent;
React.memo
或 useMemo
进行性能优化。import React, { useContext, useMemo } from 'react';
const MyContext = React.createContext();
function MyComponent() {
const contextValue = useContext(MyContext);
const processedValue = useMemo(() => {
// 对上下文值进行处理
return contextValue + ' processed';
}, [contextValue]);
return (
<div>
<p>{processedValue}</p>
</div>
);
}
export default React.memo(MyComponent);
领取专属 10元无门槛券
手把手带您无忧上云