gpt4 book ai didi

javascript - 三元不更新 React 中的 View

转载 作者:行者123 更新时间:2023-12-05 03:51:08 25 4
gpt4 key购买 nike

我有这个相当简单的 NavBar 组件,我希望它根据您是否登录显示不同的按钮。它在您首次加载页面且未登录时起作用。当您适当登录时,它会更新 View 。但是,当您注销时, View 不会更新,您会继续看到 truthy 分支中的按钮。注销功能实际上是从 localStorage 中删除 token —— View 只是没有更新。有什么建议吗?

import React from 'react';
import { NavLink } from 'react-router-dom';
import '../App.css';

function Navigation() {
const logout = function () {
localStorage.removeItem('username');
localStorage.removeItem('token');
};

return (
<>
{localStorage.getItem('token') ? (
<div className='nav'>
<NavLink to='/' className='link'>
Home
</NavLink>
<NavLink to='/login' className='link' onClick={logout}>
Log Out
</NavLink>
</div>
) : (
<div className='nav'>
<NavLink to='/register' className='link'>
{' '}
Register{' '}
</NavLink>
<NavLink to='/login' className='link'>
Log In
</NavLink>
</div>
)}
</>
);
}
export default Navigation;

最佳答案

你必须以某种方式引起重新渲染,我可能会这样做:

import { NavLink } from 'react-router-dom'
import '../App.css';

function Navigation () {
const [loggedIn, setLoggedIn] = React.useState(!!localStorage.getItem('token'))
const logout = function(){
localStorage.removeItem('username')
localStorage.removeItem('token')
setLoggedIn(false);
}

return (
<>
{loggedIn
? (<div className='nav'><NavLink to='/' className='link'>Home</NavLink> <NavLink to='/login' className='link' onClick={logout}>Log Out</NavLink></div>)
: (<div className='nav'> <NavLink to='/register' className='link'>Register</NavLink> <NavLink to='/login' className='link'>Log In</NavLink></div>)
}
</>
)

}
export default Navigation

关于javascript - 三元不更新 React 中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63181542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com