javascript - 在发布请求后获取数据将带回旧数据
问题描述
这是我在这里的第一个问题,我只玩了几个月的网络技术,所以我要问的问题可能是微不足道的,但我似乎无法自己解决这个问题。
我在这里要做的是打开一个模式并使用一个表单将一些数据发布到我的快递后端。在我从服务器获得响应后,我通过 props 将其发送到父组件。
const CreateAccount = (props) => {
// context
const authContext = useContext(AuthContext);
const [accountType, setAccountType] = useState("standard");
const [accountCurrency, setAccountCurrency] = useState("ron");
const { post, loading, error } = useFetch(process.env.REACT_APP_BACKEND, {
headers: { Authorization: `Bearer ${authContext.token}` },
});
const handleFormSubmit = async (e) => {
e.preventDefault();
const response = await post("/accounts", { accountType, accountCurrency });
console.log(response.data);
props.setHttpResponse(response.message);
// if modal is given, close it after submiting the form
props.closeModal && props.closeModal();
};
响应由消息和更新的文档组成。一切正常,文档正确保存在数据库中,我得到了预期的响应,并且父组件在响应发送后重新呈现
在父组件中,我有 useEffect 函数,该函数应该在组件第一次安装时以及每次设置来自模态的响应时获取数据(所以无论我在哪里发送发布请求)。组件确实重新呈现,我从服务器得到响应,但问题是我得到的响应是旧响应,而不是更新的响应,其中包含在我之前发送的发布请求中设置的新数据模态的。
const InitializedPage = () => {
Modal.setAppElement("#modal");
// context
const authContext = useContext(AuthContext);
const [userData, setUserData] = useState({});
const [createAccountResponse, setCreateAccountResponse] = useState(""); // the response i get from the modal after i send post request to the server
const { loading, get } = useFetch(process.env.REACT_APP_BACKEND, {
headers: {
Authorization: `Bearer ${authContext.token}`,
"Cache-Control": "no-cache",
},
});
// get data for specific user
useEffect(() => {
const { userId } = authContext.userData;
(async () => {
const response = await get(`/users/${userId}`);
console.log(response); // here the response is the old one whenever the component rerenders
setUserData(response.userData);
})();
}, [get, authContext, createAccountResponse]);
如果有人可以,请告诉我我错过了什么或我在这里做错了什么?
编辑:我忘了补充一点,如果我刷新页面,我将获得更新的数据。
解决方案
推荐阅读
- r - 如何使用 rlang 代词而不产生错误 - .data
- python - Pytorch ValueError: Expected target size (2, 13),在调用 CrossEntropyLoss 时得到了 torch.Size([2])
- python - 如何将错误添加到特定命令 discord.py
- javascript - React-Native:带有 if 语句的 Flatlist
- ios - Dart 颤振 Admob 在 Ios 中不起作用。我大约 1 周前发布了我的应用程序
- c++ - 间接需要指针操作数错误
- c++ - 在 C++ 中不使用数组或最小值/最大值计算测试成绩平均值
- aem - 仅当存在时才在 Sightly/HTL 中添加属性 (AEM)
- deep-learning - 为什么小权重有助于深度神经网络(正则化)
- javascript - 条卡元素输入不显示