pair-question-anhnk
v1.0.0
Published
React component and hook which listens to the beforeunload window event.
Downloads
2
Maintainers
Readme
react-beforeunload
React component and hook which listens to the beforeunload
window event.
Usage
useBeforeunload
Hook (recommended)
useBeforeunload(handler);
Parameters
handler
function to be called withBeforeUnloadEvent
whenbeforeunload
event is fired.
Example
import { useBeforeunload } from 'react-beforeunload';
const Example = (props) => {
const [value, setValue] = useState('');
useBeforeunload((event) => {
if (value !== '') {
event.preventDefault();
}
});
return (
<input onChange={(event) => setValue(event.target.value)} value={value} />
);
};
Beforeunload
Component
<Beforeunload onBeforeunload={handler} />
Props
onBeforeunload
function to be called withBeforeUnloadEvent
whenbeforeunload
event is fired.
Example
import { Beforeunload } from 'react-beforeunload';
class Example extends React.Component {
state = { value: '' };
render() {
return (
<>
{this.state.value !== '' && (
<Beforeunload onBeforeunload={(event) => event.preventDefault()} />
)}
<input
onChange={(event) => this.setState({ value: event.target.value })}
value={this.state.value}
/>
</>
);
}
}
:information_source: The Beforeunload
component will render any children passed as-is, so it can be used as a wrapper component:
<Beforeunload onBeforeunload={…}>
<MyApp />
</Beforeunload>
Custom message support
To display a custom message in the triggered dialog box, return a string in the passed event handler function.
With useBeforeunload
hook:
useBeforeunload(() => 'You’ll lose your data!');
With Beforeunload
component:
<Beforeunload onBeforeunload={() => 'You’ll lose your data!'} />
:warning: Some browsers used to display the returned string in the confirmation dialog, enabling the event handler to display a custom message to the user. However, this is deprecated and no longer supported in most browsers.
Requirements
Requires a minimum of React version 16.8.0. If you're on an older version of React, then checkout v1.