use-form-item.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { __assign } from "tslib";
  2. import { useState, useEvent, useRef, useEffect, } from 'functional-mini/component';
  3. import { triggerRefEvent } from '../_util/hooks/useReportRef';
  4. export var useFormItem = function (props) {
  5. var _a = useState({
  6. value: undefined,
  7. status: 'default',
  8. required: false,
  9. errors: [],
  10. }), formData = _a[0], setFormDate = _a[1];
  11. var formRef = useRef(formData);
  12. var emitRef = useRef(null);
  13. useEvent('setFormData', function (values) {
  14. setFormDate(function (old) {
  15. var newValue = __assign(__assign({}, old), values);
  16. formRef.current = newValue;
  17. return newValue;
  18. });
  19. });
  20. useEvent('getFormData', function () {
  21. return formRef.current;
  22. });
  23. useEvent('on', function (callback) {
  24. emitRef.current = callback;
  25. });
  26. var originalProps = useRef();
  27. useEvent('getProps', function () {
  28. return props;
  29. });
  30. useEffect(function () {
  31. return function () {
  32. emit('didUnmount');
  33. };
  34. }, []);
  35. function emit(event, value, extraInfo) {
  36. if (emitRef.current) {
  37. emitRef.current(event, value, extraInfo);
  38. }
  39. }
  40. // 这个必须要放在后面。
  41. triggerRefEvent();
  42. useEffect(function () {
  43. emit('deriveDataFromProps', props, originalProps.current);
  44. originalProps.current = props;
  45. }, [props]);
  46. return {
  47. formData: formData,
  48. emit: emit,
  49. };
  50. };