useEffectState.js 810 B

12345678910111213141516171819202122232425262728
  1. import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
  2. import { useState, useCallback, useEffect } from 'react';
  3. /**
  4. * Trigger a callback on state change
  5. */
  6. export default function useEffectState() {
  7. var _useState = useState({
  8. id: 0,
  9. callback: null
  10. }),
  11. _useState2 = _slicedToArray(_useState, 2),
  12. effectId = _useState2[0],
  13. setEffectId = _useState2[1];
  14. var update = useCallback(function (callback) {
  15. setEffectId(function (_ref) {
  16. var id = _ref.id;
  17. return {
  18. id: id + 1,
  19. callback: callback
  20. };
  21. });
  22. }, []);
  23. useEffect(function () {
  24. var _effectId$callback;
  25. (_effectId$callback = effectId.callback) === null || _effectId$callback === void 0 || _effectId$callback.call(effectId);
  26. }, [effectId]);
  27. return update;
  28. }