typeof to determine if the document is defined or not.useRef() hook to store the original title of the document, if defined.useEffect() hook to set Document.title to the passed value when the component mounts and clean up when unmounting.const useTitle = title => {
const documentDefined = typeof document !== 'undefined';
const originalTitle = React.useRef(documentDefined ? document.title : null);
React.useEffect(() => {
if (!documentDefined) return;
if (document.title !== title) document.title = title;
return () => {
document.title = originalTitle.current;
};
}, []);
};
const Alert = () => {
useTitle('Alert');
return <p>Alert! Title has changed</p>;
};
const MyApp = () => {
const [alertOpen, setAlertOpen] = React.useState(false);
return (
<>
<button onClick={() => setAlertOpen(!alertOpen)}>Toggle alert</button>
{alertOpen && <Alert />}
</>
);
};
ReactDOM.render(<MyApp />, document.getElementById('root'));Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️