Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.74 KB | None | 0 0
  1. import { useReducer } from 'react';
  2. import debounce from 'lodash/debounce';
  3.  
  4. function windowSizeReducer(state, action) {
  5. if (action.type === 'resize') {
  6. return action.width;
  7. }
  8. return state;
  9. }
  10.  
  11. function useWindowSize() {
  12. const [width, dispatch] = useReducer(windowSizeReducer, window.innerWidth);
  13.  
  14. useEffect(
  15. () => {
  16. function handleResize() {
  17. dispatch({ type: 'resize', width: window.innerWidth });
  18. }
  19.  
  20. const lazilyHandleResize = debounce(handleResize, 100);
  21.  
  22. window.addEventListener('resize', lazilyHandleResize);
  23.  
  24. return function detachResizeHandler() {
  25. window.removeEventListener('resize', lazilyHandleResize);
  26. };
  27. },
  28. [dispatch],
  29. );
  30.  
  31. return width;
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement