virtual-scroller 1.12.1 → 1.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/CODE_OF_CONDUCT.md +78 -0
  3. package/README.md +75 -10
  4. package/bundle/virtual-scroller-dom.js +1 -1
  5. package/bundle/virtual-scroller-dom.js.map +1 -1
  6. package/bundle/virtual-scroller-react.js +1 -1
  7. package/bundle/virtual-scroller-react.js.map +1 -1
  8. package/bundle/virtual-scroller.js +1 -1
  9. package/bundle/virtual-scroller.js.map +1 -1
  10. package/commonjs/ItemHeights.js +1 -1
  11. package/commonjs/ItemHeights.js.map +1 -1
  12. package/commonjs/Layout.js +1 -1
  13. package/commonjs/Layout.js.map +1 -1
  14. package/commonjs/Scroll.js +2 -1
  15. package/commonjs/Scroll.js.map +1 -1
  16. package/commonjs/VirtualScroller.js +62 -23
  17. package/commonjs/VirtualScroller.js.map +1 -1
  18. package/commonjs/VirtualScroller.layout.js +16 -10
  19. package/commonjs/VirtualScroller.layout.js.map +1 -1
  20. package/commonjs/VirtualScroller.onRender.js +2 -2
  21. package/commonjs/VirtualScroller.onRender.js.map +1 -1
  22. package/commonjs/getVerticalSpacing.js +5 -2
  23. package/commonjs/getVerticalSpacing.js.map +1 -1
  24. package/commonjs/react/VirtualScroller.js +3 -0
  25. package/commonjs/react/VirtualScroller.js.map +1 -1
  26. package/commonjs/react/useEffectDontMountTwiceInStrictMode.js +83 -0
  27. package/commonjs/react/useEffectDontMountTwiceInStrictMode.js.map +1 -0
  28. package/commonjs/react/useInsertionEffectDontMountTwiceInStrictMode.js +20 -0
  29. package/commonjs/react/useInsertionEffectDontMountTwiceInStrictMode.js.map +1 -0
  30. package/commonjs/react/useLayoutEffectDontMountTwiceInStrictMode.js +20 -0
  31. package/commonjs/react/useLayoutEffectDontMountTwiceInStrictMode.js.map +1 -0
  32. package/commonjs/react/useState.js +13 -7
  33. package/commonjs/react/useState.js.map +1 -1
  34. package/commonjs/react/useStateNoStaleBug.js +59 -0
  35. package/commonjs/react/useStateNoStaleBug.js.map +1 -0
  36. package/modules/ItemHeights.js +1 -1
  37. package/modules/ItemHeights.js.map +1 -1
  38. package/modules/Layout.js +1 -1
  39. package/modules/Layout.js.map +1 -1
  40. package/modules/Scroll.js +2 -1
  41. package/modules/Scroll.js.map +1 -1
  42. package/modules/VirtualScroller.js +62 -23
  43. package/modules/VirtualScroller.js.map +1 -1
  44. package/modules/VirtualScroller.layout.js +16 -10
  45. package/modules/VirtualScroller.layout.js.map +1 -1
  46. package/modules/VirtualScroller.onRender.js +2 -2
  47. package/modules/VirtualScroller.onRender.js.map +1 -1
  48. package/modules/getVerticalSpacing.js +5 -2
  49. package/modules/getVerticalSpacing.js.map +1 -1
  50. package/modules/react/VirtualScroller.js +3 -1
  51. package/modules/react/VirtualScroller.js.map +1 -1
  52. package/modules/react/useEffectDontMountTwiceInStrictMode.js +75 -0
  53. package/modules/react/useEffectDontMountTwiceInStrictMode.js.map +1 -0
  54. package/modules/react/useInsertionEffectDontMountTwiceInStrictMode.js +9 -0
  55. package/modules/react/useInsertionEffectDontMountTwiceInStrictMode.js.map +1 -0
  56. package/modules/react/useLayoutEffectDontMountTwiceInStrictMode.js +9 -0
  57. package/modules/react/useLayoutEffectDontMountTwiceInStrictMode.js.map +1 -0
  58. package/modules/react/useState.js +11 -8
  59. package/modules/react/useState.js.map +1 -1
  60. package/modules/react/useStateNoStaleBug.js +51 -0
  61. package/modules/react/useStateNoStaleBug.js.map +1 -0
  62. package/package.json +1 -1
  63. package/source/ItemHeights.js +1 -1
  64. package/source/Layout.js +1 -1
  65. package/source/Scroll.js +1 -0
  66. package/source/VirtualScroller.js +61 -21
  67. package/source/VirtualScroller.layout.js +14 -8
  68. package/source/VirtualScroller.onRender.js +2 -2
  69. package/source/getVerticalSpacing.js +5 -2
  70. package/source/react/VirtualScroller.js +3 -0
  71. package/source/react/useEffectDontMountTwiceInStrictMode.js +68 -0
  72. package/source/react/useInsertionEffectDontMountTwiceInStrictMode.js +10 -0
  73. package/source/react/useLayoutEffectDontMountTwiceInStrictMode.js +10 -0
  74. package/source/react/useState.js +8 -5
  75. package/source/react/useStateNoStaleBug.js +35 -0
@@ -0,0 +1,35 @@
1
+ import { useRef, useState, useCallback } from 'react'
2
+
3
+ // This hook fixes any weird intermediate inconsistent/invalid/stale state values.
4
+ // https://github.com/facebook/react/issues/25023#issuecomment-1480463544
5
+ export default function useStateNoStaleBug(initialState) {
6
+ // const latestValidState = useRef(initialState)
7
+ const latestWrittenState = useRef(initialState)
8
+ const [_state, _setState] = useState(initialState)
9
+
10
+ // Instead of dealing with a potentially out-of-sync (stale) state value,
11
+ // simply use the correct latest one.
12
+ const state = latestWrittenState.current
13
+
14
+ /*
15
+ let state
16
+ if (_state === latestWrittenState.current) {
17
+ state = _state
18
+ latestValidState.current = _state
19
+ } else {
20
+ // React bug detected: an out-of-sync (stale) state value received.
21
+ // Ignore the out-of-sync (stale) state value.
22
+ state = latestValidState.current
23
+ }
24
+ */
25
+
26
+ const setState = useCallback((newState) => {
27
+ if (typeof newState === 'function') {
28
+ throw new Error('Function argument of `setState()` function is not supported by this hook')
29
+ }
30
+ latestWrittenState.current = newState
31
+ _setState(newState)
32
+ }, [])
33
+
34
+ return [state, setState]
35
+ }