javascript - 页面重新加载时如何使用useEffect deps?
问题描述
我得到了带有文章的简单博客,当用户单击编辑按钮时,他得到的表格中充满了文章数据——标题、描述、正文和标签。当我得到“id”时,我使用 useEffect 获取数据并填写表格。如果没有“id”表格应该是空白的。这是我的使用效果:
useEffect(() => {
if (id) {
isLoading = true;
return props.onLoad(userService.articles.get(id));
}
props.onLoad(null);
}, [id]
);
但是当我重新加载页面 id 时没有改变,并且 func userService.articles.get(id) 没有运行,所有数据都消失了。我需要建议如何解决它?可能是我需要使用其他部门来实现 useEffect,但现在我不知道我可以使用哪些部门来使用 exept id。
更新:谢谢大家的帮助。我想要的是:
- 当编辑页面加载/重新加载和“id”存在时->填写表单字段
- 当“id”不存在时 -> 空白表单域
现在,当我重新加载编辑页面时,我得到了 id - 但所有数据都消失了,我得到了空白表格:(
这是完整的代码:codesandbox
ps 我使用免费的 API - 因此您可以在几秒钟内使用任何想象的电子邮件、用户名和密码创建用户。您不需要邮件确认。
解决方案
您应该使用this.props.match.params
来访问id
来自 url 的内容。
useEffect(() => {
if (props.match.params.id) {
setIsloading(true);
userService.articles.get(props.match.params.id)
.then((resp) => {
setIsloading(false);
props.onLoad(resp)
})
} else {
props.onLoad(null);
}
}, [props.match.params.id]);
此外,您应该依靠useState
来管理您的isLoading
变量。
const [isLoading, setIsloading] = useState(false);
我对您提供的代码做了更多的研究。将initialValues
首先为空,因为来自 的数据props
尚不存在。一旦initialValues
设置好了就不能动态地改变它们,你必须求助于 antd Form
api。
您不能通过 value 或
defaultValue
prop 为每个表单控件设置值,您应该使用initialValues
Form 设置默认值。请注意,initialValues
不能setState
动态更新,您应该setFieldsValue
在这种情况下使用。
这里的关键是使用另一个useEffect
依赖于来自 的表单值,props
并使用它们通过 重置表单值setFieldsValue
。
推荐阅读
- c++ - C++ variable_name.attribute = x
- google-apps-script - 谷歌脚本 - 清除范围,除了一个特定的单元格值
- python - 如果其中一列是先前数据的±5位,如何找到特定的重复数据?
- node.js - TypeError: notesExist.push 不是函数?
- python - Python:扩展 Selenium WebElement 类
- python - Python/无效语法
- vue.js - Vuetify 覆盖默认道具值
- reactjs - 无法与 Mongoose (Mongodb) 连接
- python - 考虑到每个项目可以有多个主题,如何将数据集中每个项目的主题转换为特征向量
- wordpress - 如何使用 Wordpress ENQUEUE 函数链接样式表