如何更新Firestore数据库中的手机号字段 现有更新逻辑是否正确
现有实现存在的问题
- 按钮点击事件写法错误:
onPress = {UpdateNumber()}会在组件渲染时直接执行更新函数,不是点击按钮时触发,需改为函数引用形式。 - TextInput使用错误:TextInput组件不支持嵌套Text子组件,初始值应该直接赋值给
useState的默认参数,再绑定到TextInput的value属性即可。 - Firestore更新语法错误:调用
set方法前缺少.连接符,同时更新逻辑参数混乱,没有将用户新输入的手机号作为更新字段传入,也没有正确指定要更新的文档ID。 - 视图结构错误:return返回的JSX中存在多余的View闭合标签,布局结构不合法。
- 冗余组件嵌套:TouchableHighlight包裹TextInput属于无效嵌套,会干扰TextInput本身的点击聚焦逻辑,可直接移除。
修正后的完整代码
const ItemDetails = ({ route }) => { // 初始化默认值为路由传递的原有手机号 const [phone, setPhone] = useState(route.params.item.MOBILE_NO) const UpdateNumber = () => { // 这里假设路由参数的item里包含Firestore文档的id字段,如果id字段名不同请自行修改 const docId = route.params.item.id db.collection("Data") .doc(docId) // 加merge: true避免覆盖文档其他字段内容,不需要全量更新可以用update方法替代 .set({ MOBILE_NO: phone }, { merge: true }) .then(() => { console.log("手机号更新成功") // 可自行补充更新成功后的提示、页面跳转等逻辑 }) .catch((error) => console.log("更新失败:", error)) } return ( <View style={{ flex: 1, paddingTop: 253, paddingLeft: 5 }}> <View style={{flexDirection: 'row', alignItems: 'center', marginBottom: 20}}> <Text style={{ fontSize: 25 }}> Mobile : </Text> <TextInput placeholder = "Mobile number" value = {phone} onChangeText = {text => setPhone(text)} style={{ fontSize: 25, backgroundColor:'#f0f8ff', borderRadius:10, width:'70%', height:30, marginLeft: 10, paddingHorizontal: 8 }} /> </View> <Button onPress={UpdateNumber} title="Update"/> </View> ) }
内容的提问来源于stack exchange,提问作者kazim ali
相关产品推荐
相关产品推荐

