import { useState } from 'react';
export default function usePrivacyMode() {
const [isPrivacyOn, setIsPrivacyOn] = useState(false);
return {
isPrivacyOn,
setIsPrivacyOn
};
}
这是我定制的钩子。我在PrivacyIcons组件中设置状态,然后使用isPrivacyOn根据值显示/隐藏表中的值。但是在一个不同的组件中,isPrivacyOn不会改变,它只在PrivacyIcons中改变?为什么我不能在一个组件中更改它,然后在所有组件中使用该值?谢谢。
发布于 2021-08-04 05:06:05
状态并不意味着在组件之间共享。您正在寻找useContext。这允许您在组件之间共享函数和状态。React在官方文档中有一个关于如何做到这一点的很好的教程:https://reactjs.org/docs/hooks-reference.html#usecontext
对于您的特定示例,它将如下所示:
你的App.js
import { useState } from 'react';
export const PrivacyContext = createContext([]);
const App = (props) => {
const [isPrivacyOn, setIsPrivacyOn] = useState(false);
return (
<PrivacyContext.Provider value={[isPrivacyOn, setIsPrivacyOn]}>
<ComponentUsingPrivacyContext />
{props.children}
</PrivacyContext.Provider>
);
};
export default App;
请记住,任何想要访问上下文组件都必须是PrivacyContext的子级
任何想要使用PrivacyContext的组件:
import React, { useContext } from "react";
import {PrivacyContext} from "...your route";
const ComponentUsingPrivacyContext = (props) => {
const [isPrivacyOn, setIsPrivacyOn] = useContext(PageContext);
return (
<button onclick={setIsPrivacyOn}>
Turn Privacy On
</button>
<span>Privacy is: {isPrivacyOn}</span>
);
};
export default ComponentUsingPrivacyContext;
https://stackoverflow.com/questions/67599182
复制相似问题