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

如何更新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:21:01