仅更改动态输入字段中的一个特定值

Posted

技术标签:

【中文标题】仅更改动态输入字段中的一个特定值【英文标题】:Change only one specific value from dynamic input field 【发布时间】:2021-12-27 03:18:12 【问题描述】:

我需要一些帮助。

所以我有:

 data.map( (doc) =>  
      return (
         <div>
             <div> doc.name</div>
             <div> doc.age</div>
         </div>
   )
)

这会将 Firebase Firestore 中的一些数据迭代到网页中。

然后有一个输入字段可以更改年龄。

const [age, setAge] = useState(1);

const handleSubmitAge = async () => 
   const ageRef = doc(db, "user", "docID")
   await updateDoc(ageRef, 
         age : age
     );


.....

<div>
     <TextField
        value=age
        onChange= e => setAge(e.target.value)
     />
     <Button onChange=handleSubmitAge>
        Submit Age
     </Button>
</div

如果我想更改 doc.age,我该怎么做?如果我只是像上面那样写,那么如果有 10 个名字,那么所有名字都会有相同的年龄。

如何在该“年龄”输入字段中引用“docID”,以便仅更新一个特定年龄的特定人员(姓名)?

【问题讨论】:

如果您只想更新一个特定文档,您需要知道该文档的 ID 并将其传递到您现在传递硬编码字符串 "docID" 的位置。您知道要更新的文档的 ID 吗? @FrankvanPuffelen 啊,好的。我想我现在用 setData(querySnapshot.docs.map((doc) => (...doc.data(), id:doc.id) 做到了。我可以不时访问文档 ID将其传递给 handleSubmitAge(id)。现在只需将更新后的值传递给 handleSubmitAge(id, newAge)。我现在将尝试传递该值。非常感谢 Frank van Puffelen 先生。 很高兴看到您自己解决了这个问题,Vincentius! ????。您可以在下面将其作为自我回答发布,而不是在您的问题中发布解决方案。这样系统就知道有答案,未来的访问者也更容易找到(并可能投票赞成)您的答案。 【参考方案1】:

解决方案:

感谢 Frank van Puffelen 先生。

首先,我需要访问 data.map( (doc) => ... ) 中每个文档的文档 ID。当我们从 Firestore 获取数据时,我们可以更早地这样做

async () => 
            const q = query(collection(db, "collectionName"), where("category", "==", `$some condition here`));
            const querySnapshot = await getDocs(q);
                querySnapshot.forEach((doc) => 
                setData(querySnapshot.docs.map((doc) => (...doc.data(), id:doc.id)))
                )
        ;

id:doc.id 给了我们文档 id。还要感谢 PedroTech 和 Maksim Ivanov 的 youtube 教程展示了如何获取此文档 ID。

【讨论】:

以上是关于仅更改动态输入字段中的一个特定值的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript:动态更改数据范围规则的值

为啥动态更改值时光标会移动到输入字段的开头?

如何根据用户输入动态更改 django 中的表单(提交前)

Angular2动态输入字段在输入更改时失去焦点

动态计算输入值 - React

更改reactjs中动态输入字段的值