javascript - Inline-if always uses the true condition
问题描述
I was writing some reactJS code, when I wanted some conditional rendering. For that I made an inline-if, that renders a component if the variable rememberMe
is true, but the code always renders the "if it's true part". Help would be appreciated.
const [rememberMe, setRememberMe] = useState(localStorage.getItem('rememberMe'))
const [asWho, setAsWho] = useState(localStorage.getItem('asWho'))
useEffect(() => {
localStorage.setItem('rememberMe', false)
console.log(localStorage.getItem('rememberMe'))
console.log(rememberMe)
if (rememberMe === null) {
localStorage.setItem('rememberMe', false)
setRememberMe(false)
}
}, [])
return (
<div>
{ rememberMe ? <GroupList test={rememberMe} /> : <PleaseLogIn /> }
</div>
)
I printed rememberMe
in <GroupList />
and it even prints false. Help would be much apprechiated.
export default function GroupList(params) {
console.log(params.test)
return (
<div>
logged in
<br/>
remember: {params.test}
</div>
)
}
解决方案
At first let's look at what localStorage.getItem('rememberMe')
returns:
console.log(typeof localStorage.getItem('rememberMe'))
// Result
>> "string"
Any string value placed in if
or ternary if-else
will be evaluate as true
.
Let's look at this:
// These lines will always print true whether string is "false" or "true"
console.log(Boolean(localStorage.getItem('rememberMe')))
console.log(Boolean("false"))
console.log(Boolean("true"))
// Result
>> true
>> true
>> true
When you are using if statement any expression is converted to Boolean
so any string
(if it is not empty) will evaluate as true
So, You need to compare if it's "false"
( Or "true"
)
const [rememberMe, setRememberMe] = useState(localStorage.getItem('rememberMe') == 'true')
const [asWho, setAsWho] = useState(localStorage.getItem('asWho') == 'true')
useEffect(() => {
localStorage.setItem('rememberMe', false)
console.log(localStorage.getItem('rememberMe'))
console.log(rememberMe)
if (rememberMe === null) {
localStorage.setItem('rememberMe', false)
setRememberMe(false)
}
}, [])
return (
<div>
{rememberMe ? <GroupList test={rememberMe} /> : <PleaseLogIn />}
</div>
)
推荐阅读
- node.js - NPM 不会扁平化全局依赖
- asp.net-mvc - 谷歌地图未显示,提示丢失键错误
- selenium - Java selenium - 无法从日历弹出窗口中选择日期
- ruby-on-rails - 具有组和平均值的 ActiveRecord 查询
- solr - Solr 禁用同义词和停用词
- asp.net-mvc - 使用 DataContextClass 添加 View 和不添加 View 有什么区别?
- java - progressDialoge 未更新
- rest - 从 Keycloak 中的 REST API 中提取角色
- apache-camel - 如何检查 Camel 消息正文是否基于流?
- java - 如何通过 AnnotationProcessor 访问 TypeUse 注释