【发布时间】:2021-11-04 23:08:18
【问题描述】:
每个人。我得到了一组包含事件信息的对象。例如:
"events": [
...,
{
"type": "unload",
"listener": "/idempotency-session/end",
"method": "post"
}
]
我想根据这个对象的信息创建 eventListener。
const handleEvent = async (api, eventPayload) => {
const {
type,
listener,
method,
action,
headers = {},
withParams = false,
} = eventPayload;
...
await callEndpoint(api, listener, method, {}, preparedHeaders)
.then(data => {
action && stateDispatch({ type: action, payload: data });
})
.catch(error => console.error(error));
};
useEffect(() => {
events && events.forEach((event) => {
const handler = () => {
handleEvent(api, event);
};
window.addEventListener(event.type, handler, event.options);
return () => {
window.removeEventListener(event.type, handler);
};
});
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
问题:卸载事件(当用户关闭页面或导航到另一个页面时)未发送请求。另外,我尝试使用 navigator.sendBeacon 功能,但没有帮助。
【问题讨论】:
标签: reactjs api react-hooks dom-events use-effect