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
相关产品推荐
相关产品推荐

