React.js学习-自定义hook-2
2020-10-19 15:11:132020-10-20 03:22:35
DOM 副作用修改 / 监听
修改页面 title
在组件里调用useDocumentTitle
即可设置页面标题,且切换页面时,页面标题重置为默认标题 “React.js学习”
const useDocumentTitle = (newTitle: string) => {
useEffect(() => {
document.title = title
return () => {
document.title = "React.js学习"
}
}, [newTitle])
}
监听页面大小发生改变(网络状况发生改变),重新渲染界面
function getSize() {
const { innerWidth, innerHeight, outerHeight, outerWidth } = window
return {
innerWidth,
innerHeight,
outerHeight,
outerWidth
};
}
function useWindowSizeChange() {
const [windowSize, setWindowSize] = useState(getSize());
const onWindowSizeChange = useCallback(() => {
setWindowSize(getSize());
}, [])
useEffect(() => {
window.addEventListener('resize', onWindowSizeChange);
return () => {
window.removeEventListener('resize', onWindowSizeChange);
}
}, [onWindowSizeChange])
return windowSize;
}
function getInternetState() {
const { onLine } = navigator
return onLine ? 'online' : 'offline'
}
function useInternetStateChange() {
const [internetState, setInternetState] = useState(getInternetState())
const onInternetStateChange = useCallback(() => {
setInternetState(getInternetState())
}, [])
useEffect(() => {
window.addEventListener("online", onInternetStateChange)
window.addEventListener("offline", onInternetStateChange)
return () => {
window.removeEventListener("online", onInternetStateChange)
window.removeEventListener("offline", onInternetStateChange)
}
}, [onInternetStateChange])
return internetState
}