reactjs - 当我的本地存储不为空时,如何直接呈现我的菜单?
问题描述
当我在我的 localStorage 上放一些东西时,我想直接渲染我的菜单。
基本上,当我的本地存储中没有任何内容时,我的渲染不会出现。当我有东西正在重新渲染但我必须实现我的页面。
如何通过重定向直接获得组合菜单?
function App() {
const [login, setLogin] = useState(false);
let logged = localStorage.getItem("connexion");
const showNav = () => {
if (localStorage.getItem("connexion") != null) {
return <Menu />;
} else {
return <div></div>;
}
};
useEffect(() => {
showNav();
if (localStorage.getItem("connexion") != null) {
setLogin(true);
}
}, [login]);
return (
<Router>
<div>
{showNav()}
<Switch>
<Route path="/contact" component={MeContacter} />
<Route path="/Home" component={Home} />
<Route path="/" component={Connexion} />
</Switch>
<Footer />
</div>
</Router>
);
}
export default App;
解决方案
您可以在对象上设置storage
事件处理程序:window
首先定义一个控制菜单是否显示的状态:
const [isMenuShowing,setMenuShowing]=useState(false)
现在在 useEffect 中,添加事件侦听器以isMenuShowing
在修改 localStorage 时更改:
useEffect(()=>{
const storageEventHandler=()=>{
if (localStorage.getItem("connexion") != null) {
setMenuShowing(true)
}}
window.addEventListener("storage",storageEventHandler)
return ()=>{window.removeEventListener(storageEventHandler)}},[])
最后 :
return (
<Router>
<div>
{isMenuShowing && <Menu/>}
<Switch>
<Route path="/contact" component={MeContacter} />
<Route path="/Home" component={Home} />
<Route path="/" component={Connexion} />
</Switch>
<Footer />
</div>
</Router>
);
重要的!根据 MDN 文档,只要对 localStorage 的更改来自另一个窗口,就会触发此事件,但我在 chrome 上对其进行了测试,如果修改也在同一个窗口上,它实际上可以工作。
推荐阅读
- python - 当测试值和预测值之间的差异如此接近时,为什么我的 MSE 如此之高?
- postgresql - 如何在函数中使用 SELECT...FOR UPDATE?
- monaco-editor - 移除选线边框
- python-3.x - 忽略顺序合并多列上的数据框
- reactjs - 为什么我在设置 express-csp-header 后在 React PWA 应用程序上收到“default-src: 'none'”内容安全策略错误?
- javascript - 单击链接时React Router不会呈现正确的页面,仅在我刷新页面时才有效
- awk - 有没有办法使用变量而不在“gawk”中使用“echo”?
- javascript - 如何填充变量列表?
- reactjs - 如何在 Express 上设置自定义标头并在 axios 上接收
- python - 错误 Matplotlib 安装请帮助我?