reactjs - useEffect 中的执行顺序:从 API 获取数据,然后更新父组件
问题描述
由于路由,我需要使用带钩子的无状态组件。不幸的是,我的执行顺序有问题。
我希望子组件(NewComment)调用 API(将评论发送到数据库),并且在这样做之后父组件应该重新加载(NewComment 组件应该从父组件触发forceReload钩子)。重新加载后,我们应该会看到新的评论。
但是,我无法在 useEffect 挂钩中强制执行顺序。我的目标是在成功将评论发送到数据库后触发钩子。发送评论后后端报告 200 OK 状态码。
发送评论可以正常工作,如果我在获取请求后手动调用 forceReload 也可以。
使用效果:
export const NewComment = ({ articleID, commentID, forceReload, reload }) => {
const formRef = useRef(null);
var isAutoFocus = commentID ? true : false;
const submitComment = async () => {
obj...
};
const requestOptions = {
...they work
};
await fetch('/submit-comment', requestOptions);
};
useEffect(() => {
const listener = (event) => {
if (
event.keyCode === 13
) {
submitComment().then(forceReload(reload + 1)) // Here I want to submitComment, wait for it successful resolve and only then forceReload should be invoked
}
};
document.addEventListener('keydown', listener);
return () => {
document.removeEventListener('keydown', listener);
};
}, []);
解决方案
推荐阅读
- jquery - 数据表的排序重置了我的日期范围搜索
- powershell - 从本地连接到 Azure VM
- forms - symfony 4 中 `getBlockPrefix` 的限制值
- php - 创建发票无法通过 Paypal REST API
- javascript - React Native 将文本组件转换为字符串
- selenium - Selenium -- 单击元素的空白区域
- linux-device-driver - 为什么 cdev_add 不执行 driver/base/core.c 的 device_add/kobject_add 之类的操作
- javascript - 使表格单元格为同一行并使其看起来像按钮
- excel - VBA excel中如何设置散点图的X轴?
- typo3 - Getting translated records in CommandController