ank*_*ush 5 javascript reactjs next.js
我正在使用 Next js Router.beforePopState 事件,我想访问我在定义此处理程序的 React 组件中创建的 useState 变量的值,示例代码如下,但每当我访问状态时,它都是空的或设置为默认值下面代码中的示例goaway状态值我总是以空字符串“”的形式在处理程序中获得,即使我在代码中设置了不同的值,有没有办法可以在处理程序中获取状态值?
const [goAway, setGoAway] = useState("");
const browserTabcloseHandler = e => {
e.preventDefault(); // If you prevent default behavior in Mozilla Firefox prompt will always be shown
// Chrome requires returnValue to be set
e.returnValue = "";
};
useEffect(() => {
if (window) {
Router.beforePopState(() => {
//if (componentShouldBeSavedAsDraft(componentData)) {
const result = window.confirm("are you sure you want to leave?");
if (!result) {
window.history.pushState("/", "");
Router.push("/marketplace/upload-component");
}
console.log(goAway); // this value is always "" even though set differently in code.
return result;
});
window.onbeforeunload = browserTabcloseHandler;
}
//Router.events.on("routeChangeStart", handleRouteChange);
return () => {
if (window) {
window.onbeforeunload = null;
}
Router.beforePopState(() => {
return true;
});
};
}, []);
Run Code Online (Sandbox Code Playgroud)
ank*_*ush 10
我能够找到解决方案,以解决我所缺少的问题,即在下面的代码中添加属性 useEffect 修复了问题-
const [goAway, setGoAway] = useState("");
const browserTabcloseHandler = e => {
e.preventDefault(); // If you prevent default behavior in Mozilla Firefox prompt will always be shown
// Chrome requires returnValue to be set
e.returnValue = "";
};
useEffect(() => {
if (window) {
Router.beforePopState(() => {
//if (componentShouldBeSavedAsDraft(componentData)) {
const result = window.confirm("are you sure you want to leave?");
if (!result) {
window.history.pushState("/", "");
Router.push("/marketplace/upload-component");
}
console.log(goAway); // this value is always "" even though set differently in code.
return result;
});
window.onbeforeunload = browserTabcloseHandler;
}
//Router.events.on("routeChangeStart", handleRouteChange);
return () => {
if (window) {
window.onbeforeunload = null;
}
Router.beforePopState(() => {
return true;
});
};
}, [goAway]); // this fixed the issue
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20259 次 |
| 最近记录: |