You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native+Firebase项目安卓端报错:signInWithEmailAndPassword的email需为有效字符串

问题原因

你代码中混用了Web端表单的输入取值逻辑,和React Native原生组件的回调规则不兼容:

  • Expo Web端运行时,TextInput会被编译为标准HTML <input> 标签,onChange回调返回的事件对象存在e.target.value属性,所以取值正常,功能可以跑通
  • 安卓/iOS原生端运行时,TextInput是原生组件,onChange回调返回的事件对象不存在e.target.value字段,你写的setEmail(e.target.value)实际是把undefined赋值给了email状态,调用Firebase登录方法时传了非字符串类型的参数,就触发了对应的报错。

解决方法

两种修改方案二选一即可:

方案1:改用TextInput专属的onChangeText回调(更推荐,写法更简洁)

onChangeText的回调参数直接是输入的文本内容,不需要再从事件对象里二次取值:

<TextInput
  placeholder="email"
  required
  value={email}
  onChangeText={(text) => setEmail(text)}
/>
<TextInput
  placeholder="password"
  required
  value={password}
  secureTextEntry={true}
  onChangeText={(text) => setPassword(text)}
/>

方案2:从原生事件对象里正确取值

如果要保留onChange写法,就从原生事件的专属字段里取输入内容:

onChange={(e) => setEmail(e.nativeEvent.text)}
// 密码输入框同理修改为
onChange={(e) => setPassword(e.nativeEvent.text)}

修改后重新运行即可在安卓设备上正常拿到输入的邮箱和密码,完成登录操作。

内容的提问来源于stack exchange,提问作者charlie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 03:06:05