javascript - 如何更新 MUI TextField 的默认值?
问题描述
我正在完成表单的最后一步,但是在尝试在from MUI的defaultValue
变量中显示用户的当前名称时遇到了问题。TextField
如果一个值以""
/null
或基本上为空开始,defaultValue
无论您将该值从“”/null 更新多少次,都将保持为空,有没有办法解决这个问题?
我有这个:
{console.log(tempName)}
<TextField
required
margin="dense"
label='Nombre'
defaultValue= {tempName}
onChange={handleChangeName} />
tempName
开始为空,但随后我更新它,useEffect
它带来了我在 atm 中登录的用户的文档数据,即使在有一个值之后defaultValue
保持为空/null/“”。
不过,我确实注意到了其他一些事情,如果您user.displayName
直接使用它确实有效,但只有在您刷新之前(因为当您刷新用户返回 null 然后像 .2 segs 一样回到他的值)
这是我在刷新之前使用用户时的样子
由于用户同时带来了姓名和姓氏(基本上是显示名称),我想将其拆分,并且所有用户信息都在一个文档中:
const [tempName, setTempName] = useState("");
const [tempLastName, setTempLastName] = useState("");
const [tempEmail, setTempEmail] = useState("");
const [tempPhone, setTempPhone] = useState("");
const [tempIdType, setTempIdType] = useState("");
const [tempIdTypes, setTempIdTypes] = useState("");
useEffect(() => {
const userDoc = db.collection('usuarios').doc(user.uid);
userDoc.get().then(doc => {
if (doc.exists) {
const tempData = [];
const data = doc.data();
tempData.push(data);
setTempName(tempData[0].name)
setTempLastName(tempData[0].lastName)
setTempEmail(tempData[0].email)
setTempPhone(tempData[0].phone)
setTempIdType(tempData[0].id)
setTempIdTypes(tempData[0].idType)
setOldPassword(tempData[0].password)
}
});
}, [user])
这就是它在火力基地中的样子
这就是假设的工作方式吗?
我会认为这defaultValue
将更新为您给它的值...谢谢,我在TextField 文档中没有找到与此相关的任何内容。我所知道的是,他们从一开始就添加了初始化值,而不是随着时间“更新”的值,我只是想在表单中显示用户的当前信息。
解决方案
看一下受控模式示例,defaultValue
不适用于后续渲染,如果要控制和更新值,请使用value
prop.
默认值通常在不受控制的模式下使用,其中值由 DOM 元素控制,而不是自身做出反应,唯一改变它的方法是在首次挂载时设置一个初始值。非受控组件的值只能在提交表单或验证值时访问(不使用 ref),如果您想根据用户键入的值动态更新状态,请使用受控模式。
value={value}
onChange={e => setState(e.target.value)}
那么 defaultValue 的目的是什么?如果您可以将占位符用于“名称”之类的内容,然后使用 value 而不是 defaultValue
如果您使用占位符,TextField
则不会在表单中提交其默认值(可能不是您在此处所期望的)。
推荐阅读
- c# - 自定义控件不显示
- javascript - 我应该如何使用 Jest 为我的 Vue 组件编写测试?
- json - MS Teams Graph API 使用 JSON BATCH 请求在频道中发布消息
- r - 在时间序列中插值数据点
- java - 两个应用程序的微配置文件运行状况
- c++ - 搜索结构向量
- android - java.lang.IllegalArgumentException:将代码从 Java 转换为 Kotlin 时,@kotlin.Metadata 未定义元素错误
- mongodb - 根据 mongo db 中的点查找用户排名
- docker - Docker 上的 GitLab - 如何为 GitLab 设置外部 URL
- python - 我不能从我的集合中删除一个日期时间对象?