我需要几个组件共享useState ,但是其中一些组件又不能立马渲染,需要在其中一个组件里的事件触发后才渲染,应该怎么做,代码演示一下
时间: 2024-03-10 16:45:16 浏览: 16
您可以使用React Context来共享状态,并使用useEffect钩子在特定事件触发后渲染组件。下面是一个简单的示例代码:
```jsx
import React, { useState, useContext, useEffect } from "react";
const MyContext = React.createContext();
function MyProvider(props) {
const [count, setCount] = useState(0);
return (
<MyContext.Provider value={{ count, setCount }}>
{props.children}
</MyContext.Provider>
);
}
function ComponentA() {
const { count } = useContext(MyContext);
return <div>Count: {count}</div>;
}
function ComponentB() {
const { count, setCount } = useContext(MyContext);
useEffect(() => {
// 在事件触发后更新组件
setCount(1);
}, [setCount]);
return <div>Component B</div>;
}
function App() {
return (
<MyProvider>
<ComponentA />
<ComponentB />
</MyProvider>
);
}
export default App;
```
在这个示例中,我们创建了一个`MyContext`,并在`MyProvider`中共享状态 `count` 和 `setCount`。在`ComponentA`中,我们只使用了`count`,而在`ComponentB`中,我们在事件触发后更新了`count`的值。
当我们在App组件中使用`MyProvider`来包裹`ComponentA`和`ComponentB`时,它们都可以访问到`MyContext`中的`count`和`setCount`。