javascript - 反应:单击按钮编辑后如何更新列表?
问题描述
我有显示类别列表的主要组件应用程序。我从服务器获取的此列表并在组件表的视图表中显示。
组件 App 也有子组件ChangeCategory
。使用此组件,我可以更改某些类别的标题。
主页.js:
const App = () => {
const [value, setValue] = useState({
list: [],
});
useEffect(() => {
async function fetchData () => {
const response = await fetch(`путь`);
const data = await response.json();
setValue({
list: data.data
});
};
}, [])
return (
<div>
<Table data = {value.list} />
<ChangeCategory />
</div>
在 Home.js 中请求后,我从服务器收到此响应:
{"data": [
{"title": "bmw", "description": "good"},
{"title": "tesla", "description": "good"},
{"title": "ford", "description": "good"} ]}
ChangeCategory.js(使用表单中的方法 PUT 编辑标题):
const ChangeCategory = (props) => {
const { /..... } = useFormik({
initialValues: {
title: '',
},
onSubmit: async (formValues) => {
const response = await fetch(`somepath`, {
method: PUT,
} )
const data = await response.json();
}});
return (
<div>
<form >
<input type="text"> </input>
<button type="submit">Edit</button>
</form>
</div>);};
在 Home.js 中请求后,我从服务器收到此响应:
{"model": {"title": "mercedes","description": "good"} }
也就是说,在响应中,我只得到我编辑的内容和新模型标题。
但我有问题:
在表单中编辑我的标题并单击提交按钮后,我的列表没有更新!
它仅在我在浏览器中重新加载页面时更新。我需要我立即看到列表中的标题更新。
单击按钮编辑后如何更新列表?
解决方案
React 仅在某些条件下重新渲染组件,例如组件的 prop 更新时。但是您总是可以告诉组件根据另一个条件进行更新。
由于您已经实现了useEffect钩子,您可以通过将变量添加到钩子的第二个参数来设置重新渲染条件(现在它只是一个空数组,也是一个有效的参数)〜您放入数组中的任何变量都会如果其值发生变化,则触发重新渲染。
考虑向组件状态添加一个布尔值,应该更新,并在单击按钮时将其设置为 true。然后在组件呈现时将其设置回 false。
推荐阅读
- r - 如何在R中导入不同的文件,每个文件都包含xml文件?
- geoserver - 地理服务器:没有这样的工作区 'gwc/service'
- python - 为什么我不能在代码中确定对象是 DataTime 类型?
- c# - 从本机代码控制第三方线程
- python-3.x - 使用 Gensim 进行动态主题建模/哪个代码?
- javascript - 我已将函数名称“测试”添加到关注中,但错误提示它无法识别为函数。谁能帮助我
- java - 如何在Java中转换字符集?
- jquery - 淘汰赛:未捕获的 ReferenceError:分配中的左侧无效
- javascript - 提交时调用 php 函数,如果可能,不使用 jQuery
- tensorflow - 需要帮助??为 Win 10 Pro 9-2-18 安装 Tensorflow-GPU