reactjs - React 中登录表单的条件渲染
问题描述
仅当 redux 商店中没有令牌时,我才尝试呈现登录表单。当我加载页面时,一切正常,我看到了表单。正确完成登录后没有任何反应,我必须刷新页面。
如何更新页面?
const [isLogged, setIsLogged] = useState(false);
const token = useSelector((state) => state.token.token);
useEffect(() => {
if (token === null || token === "undefined" || token === "") {
return setIsLogged(false);
} else {
return setIsLogged(true);
}
}, []);
return (
<BookList>
{!isLogged && <Login />}
`
解决方案
完成登录后没有任何反应,因为您的组件状态isLogged
仍然是false
. redux 存储更新,但您的组件没有。
不需要isLogged
存储在状态中。它可以从你的 redux 商店的状态中派生出来。
const token = useSelector((state) => state.token.token);
const isLogged = ! (token === null || token === "undefined" || token === "");
return (
<BookList>
{!isLogged && <Login />}
但是您可以缩短检查时间,只看是否token
为真,因为""
,null
和undefined
都是假的。
const token = useSelector((state) => state.token.token);
return (
<BookList>
{!token && <Login />}
推荐阅读
- python - 混合 defaultdict (dict 和 int)
- google-analytics - Google Analytics 中的屏幕视图
- sql-server - 输入字符串与数据库中字符串的快速匹配
- c++ - how to create instance of some class that define in other dll/lib?
- c# - 为什么 .NET Dictionary FindEntry 比简单循环更快?
- laravel - 在应用程序/域层中使用 Laravel 合约
- python - ModuleNotFoundError:运行 yum 或 dnf 时没有名为“dnf”的模块
- ruby - 仅在分词符处插入换行符,这样任何行都不会超过 80 个字符
- mysql - MySQL 存储过程查询区分大小写但简单查询返回结果不区分大小写
- c++ - How can I fake a class with templated methods without recompiling?