useAutoTable.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { useState, useEffect } from 'react'
  2. import { useDebounceFn } from 'ahooks'
  3. import { useStore } from 'dva'
  4. /**
  5. *
  6. * @param {number} needSubtractHeight 被裁去的高度
  7. * @param {number} needSubtractWidth 被裁去的宽度
  8. */
  9. const useAutoTable = (needSubtractHeight, needSubtractWidth) => {
  10. const { collapsed = true } = useStore().getState().global
  11. const [scroll, setScroll] = useState({
  12. x: document.body.clientWidth - ((collapsed ? 208 : 48) + needSubtractWidth),
  13. y: document.body.clientHeight - needSubtractHeight
  14. })
  15. // const { run, cancel } = useDebounceFn(handleScroll, { wait: 5000})
  16. const { run, cancel } = useDebounceFn(() =>
  17. setScroll({
  18. ...scroll,
  19. x: document.body.clientWidth - ((collapsed ? 208 : 48) + needSubtractWidth),
  20. y: document.body.clientHeight - needSubtractHeight
  21. })
  22. )
  23. useEffect(() => {
  24. run()
  25. return () => cancel()
  26. }, [collapsed])
  27. useEffect(() => {
  28. window.addEventListener('resize', run)
  29. return () => {
  30. window.removeEventListener('resize', cancel)
  31. }
  32. }, [])
  33. // 实际返回的宽度要大一点让table出现滚动条,反正折叠菜单栏卡顿
  34. return [scroll.x + 50, scroll.y]
  35. }
  36. export default useAutoTable