我使用axios从数据库中获取、放置和删除值,并将它们显示在表中;但是,我需要刷新页面以查看我的更改。为了找到答案,我访问了以下帖子:调用axios成功后如何更新页面?react,react中的操作后刷新表,以及在删除或添加行时如何使用react挂钩刷新表?不幸的是,我仍然无法确定如何在响应更新时动态更新表行。
更新:我注意到 getValues
函数在post和delete方法之前运行,这就是为什么它当前在方法执行之前显示先前的值。
js-我在这里使用get和delete方法。它们的工作原理与我在控制台上打印的响应相同。
import axios from "axios";
const getValues = async () => {
const values = await axios
.get("https://pokeapi.co/api/v2/type/")
.then((response) => {
return response.data;
})
.catch(function (error) {
console.log(error);
});
return values;
};
const postValues = (values) => {
axios
.post("https://pokeapi.co/api/v2/type/")
.then((response) => {
console.log("Post Values: ", response.data);
return response.data;
});
};
const deleteValues = (id) => {
console.log(id);
const deleteValues = axios
.delete(`https://pokeapi.co/api/v2/type/${id}`)
.then((response) => {
console.log("Delete Values: ", response);
})
.catch(function (error) {
console.log(error);
});
return deleteValues;
};
export { getValues, postValues, deleteValues }
valuestable.js-执行delete方法的位置
import Axios from "./Axios";
const [data, setData] = React.useState();
useEffect(() => {
Axios.getValues().then((result) => {
setData(result.data);
});
}, [data]);
return (
{data.map((values) => {
<TableRow/>
<TableCell>{values.values}</TableCell>
<TableCell>
<Button
onClick={() =>
Axios.deleteValues(values.id);
}
/>
})};
)
form.js-执行post方法的位置
if (values.id === 0) {
Axios.postValues(values);
} else {
Axios.putValues(values, values.id);
}
使用状态 setData(result.data)
加载数据库中的所有现有值。方法 deleteValues
删除数组中的值。方法 postValues
将值添加到数据库中。
4条答案
按热度按时间xxb16uws1#
好吧,你不知道该叫什么
setData
在一年之内useEffect
勾搭data
作为依赖项,因为这将导致出现无限循环(渲染循环)。自从
getValues
实用工具已将response.data
值可能不需要在ui中再次执行此操作。此外,请拆下data
附属国。对于
deleteValues
实用程序,如果console.log("Delete Values: ", response);
显示的值比我认为您需要从deleteValues
.然后在
ValuesTable
你需要更新你的data
使用新删除的值进行状态设置。更新
好的,因为
deleteValues
实用程序不返回更新的data
从后端,您需要手动维护本地状态。我建议在回调处理程序中完成这项工作。成功删除后,更新本地状态。注意,我已经写了
deleteHandler
是一个curry函数,因此不需要为按钮的onClick
处理程序。它包含了电流id
在回调的“示例”中。更新2
如果您在后端对数据进行许多不同的更改,那么在每次后端更新之后,使用“获取”状态触发器重新提取(“获取”)数据可能会更容易。无论何时调用更新数据库中的数据,一旦成功,将通过
useEffect
钩子。egmofgnx2#
我认为你在这里错了:
请换成这个
e5njpo683#
.then((response)=>{return response.data;})。catch(函数(错误){console.log(错误);});返回值;};
我不知道为什么,但你想用这个实现什么。您应该使用async/await子句或then子句,但您至少在使用这两个子句之前有一些良好的编码实践。其次,我认为应该在try-catch中使用async-await并删除then/catch短语,以使代码更易于理解,然后如果将结果存储在值中,则只需返回
values.data
你的问题可能会得到解决。7xllpg7q4#
自从
deleteValues
函数从服务器端的数组中删除特定对象,我决定filter
阵列中的对象列表,以便删除匹配id以反映前端。https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/array/filter我就是这样做的。