如果用户离开 React 组件,则删除图像
Delete images if the user is leaving the component React
我有一个带有拖放组件的表单,我可以在其中上传图像,之后我将这些带有 axios 的图片发送到我的后端并将其保存在服务器端,然后在预览模式下重新渲染它。我的问题是,如果用户上传了一些图片,然后他在没有提交表单的情况下切换到另一个页面,那么添加的图片无缘无故地保留在我的服务器端。
所以问题是:如果用户要离开,我想检查我的组件内部,显示提示,如果他单击“确定”按钮,我想在离开之前从我的后端删除所有添加的图片。我该如何检测?
我的简化代码段:
function MyComp(props) {
const [Images,setImages] = useState([]) // in this array I store the recieved image's URL
const [isBlocking,setIsBlocking] = useState(true) // used for prompt
const handleSubmit = (event) => {
event.preventDefault();
setIsBlocking(false)
}
return(
<Grid container className={classes.mainGrid} direction="row" spacing={2}>
<Grid item xs={4} xl={4}>
<Prompt when={isBlocking} message="There are unsaved datas. Are you sure you want to leave?"/>
<form className={classes.form} onSubmit={handleSubmit}>
... somecode
</Grid>
</Grid>
)
}
export default MyComp
提前致谢
当您离开页面时,组件方法 componentWillUnmount()
会触发。我不记得如果你只是关闭浏览器 window 而不是只是离开,我不记得它是如何表现的,我也不记得你如何逃脱它并留在组件上,但这至少应该是一个对你来说很好的起点。显然,您必须为此做一个 class 扩展 React.Component 而不是直接函数。
在 React 函数组件中,您可以在用户试图离开时调用提示,即当组件正在卸载时
在Class React Component中可以使用React componentWillUnmount(),在Function Component中可以使用useEffect cleanup function
函数组件代码
import React, { useEffect } from "react";
import { Link } from "react-router-dom";
export default function Home(props) {
useEffect(() => {
return function cleanup() {
alert("unmounting");
//call api and execute your code here
};
}, []);
return (
<div>
<Link to="/home">
On Click I will unmount this component and go to /home
</Link>
</div>
</Link>
);
}
Class 组件的代码
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
export default class Test extends Component {
componentWillUnmount() {
alert('unmounting component');
//call your code here
}
render() {
return (
<div>
<Link to='/home'>
On Click I will unmount this component and go to /home
</Link>
</div>
);
}
}
如果你想要任何参考,你可以检查这个codesandbox
我有一个带有拖放组件的表单,我可以在其中上传图像,之后我将这些带有 axios 的图片发送到我的后端并将其保存在服务器端,然后在预览模式下重新渲染它。我的问题是,如果用户上传了一些图片,然后他在没有提交表单的情况下切换到另一个页面,那么添加的图片无缘无故地保留在我的服务器端。
所以问题是:如果用户要离开,我想检查我的组件内部,显示提示,如果他单击“确定”按钮,我想在离开之前从我的后端删除所有添加的图片。我该如何检测?
我的简化代码段:
function MyComp(props) {
const [Images,setImages] = useState([]) // in this array I store the recieved image's URL
const [isBlocking,setIsBlocking] = useState(true) // used for prompt
const handleSubmit = (event) => {
event.preventDefault();
setIsBlocking(false)
}
return(
<Grid container className={classes.mainGrid} direction="row" spacing={2}>
<Grid item xs={4} xl={4}>
<Prompt when={isBlocking} message="There are unsaved datas. Are you sure you want to leave?"/>
<form className={classes.form} onSubmit={handleSubmit}>
... somecode
</Grid>
</Grid>
)
}
export default MyComp
提前致谢
当您离开页面时,组件方法 componentWillUnmount()
会触发。我不记得如果你只是关闭浏览器 window 而不是只是离开,我不记得它是如何表现的,我也不记得你如何逃脱它并留在组件上,但这至少应该是一个对你来说很好的起点。显然,您必须为此做一个 class 扩展 React.Component 而不是直接函数。
在 React 函数组件中,您可以在用户试图离开时调用提示,即当组件正在卸载时
在Class React Component中可以使用React componentWillUnmount(),在Function Component中可以使用useEffect cleanup function
函数组件代码
import React, { useEffect } from "react";
import { Link } from "react-router-dom";
export default function Home(props) {
useEffect(() => {
return function cleanup() {
alert("unmounting");
//call api and execute your code here
};
}, []);
return (
<div>
<Link to="/home">
On Click I will unmount this component and go to /home
</Link>
</div>
</Link>
);
}
Class 组件的代码
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
export default class Test extends Component {
componentWillUnmount() {
alert('unmounting component');
//call your code here
}
render() {
return (
<div>
<Link to='/home'>
On Click I will unmount this component and go to /home
</Link>
</div>
);
}
}
如果你想要任何参考,你可以检查这个codesandbox