React+Firebase手机号认证中手机号匹配条件渲染失效问题
问题根因
- 等值判断两侧类型不匹配:你最初写的
+91821024343 === user.phoneNumber中,左侧值没有包裹引号,JS会把开头的+识别为一元正号运算符,将后续内容解析为数值类型的91821024343;但Firebase Authentication返回的user.phoneNumber是E.164标准格式的字符串,值为"+91821024343"。使用===做严格相等判断时,类型不同会直接返回false,因此匹配逻辑永远不会命中「Verified」分支。 - 现有代码存在两个额外隐患:
- 拼写错误:代码中所有
Varified为错误拼写,正确写法是Verified - 空值访问风险:组件首次加载时
useAuthState返回的user初始值为null,直接访问user.phoneNumber会触发类型错误,导致页面渲染崩溃。你当前能看到后续两行渲染正常,是Auth状态拉取完成后组件重渲染的结果,首次加载阶段会存在报错。
- 拼写错误:代码中所有
修复方法
- 把判断条件中写死的手机号改为字符串格式,保证和
user.phoneNumber类型一致 - 增加空值安全访问,避免user未加载时的属性访问报错
- 修正所有单词拼写错误
直接替换原有手机号判断的代码即可:
{user?.phoneNumber === "+91821024343" ? "Verified" : "Not Verified"}
代码中
?.是JS可选链操作符,当user为null或undefined时,整个表达式会短路返回undefined,不会触发属性访问报错,此时和右侧手机号字符串对比返回false,会正常展示「Not Verified」,逻辑完全符合预期。
内容的提问来源于stack exchange,提问作者nishikant singh
相关产品推荐
相关产品推荐

