@canlooks/can-ui 0.0.123 → 0.0.125

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.
@@ -99,7 +99,7 @@ const FormItem = ({ ref, wrapperRef, field, initialValue, label = '', rules, req
99
99
  const dependencyValues = (0, react_1.useMemo)(() => {
100
100
  return formValue && dependencies?.map(d => (0, utils_1.queryDeep)(formValue, d));
101
101
  }, [formValue, ...dependencies || []]);
102
- (0, react_1.useMemo)(() => {
102
+ (0, utils_1.useStrictMemo)(() => {
103
103
  if (!shouldValidate.current) {
104
104
  // 跳过首次渲染
105
105
  shouldValidate.current = true;
@@ -6,5 +6,5 @@ const react_fontawesome_1 = require("@fortawesome/react-fontawesome");
6
6
  const utils_1 = require("../../utils");
7
7
  const classes = (0, utils_1.defineInnerClasses)('icon');
8
8
  function Icon({ color, ...props }) {
9
- return ((0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { ...props, className: (0, utils_1.clsx)(classes.root, props.className), color: (0, utils_1.useColor)(color) }));
9
+ return ((0, jsx_runtime_1.jsx)(react_fontawesome_1.FontAwesomeIcon, { ...props, className: (0, utils_1.clsx)(classes.root, props.className), color: (0, utils_1.useColor)(color), fontSize: 14 }));
10
10
  }
@@ -64,3 +64,7 @@ export declare function useStrictEffect(effect: EffectCallback, deps?: Dependenc
64
64
  * 用法同{@link useEffect},但会排除首次渲染
65
65
  */
66
66
  export declare function useUpdateEffect(effect: EffectCallback, deps?: DependencyList): void;
67
+ /**
68
+ * 用法同{@link useMemo},但StrictMode下不会执行两次
69
+ */
70
+ export declare function useStrictMemo<T>(factory: () => T, deps?: DependencyList): T | undefined;
@@ -12,6 +12,7 @@ exports.useContainer = useContainer;
12
12
  exports.useExternalClass = useExternalClass;
13
13
  exports.useStrictEffect = useStrictEffect;
14
14
  exports.useUpdateEffect = useUpdateEffect;
15
+ exports.useStrictMemo = useStrictMemo;
15
16
  const react_1 = require("react");
16
17
  const utils_1 = require("./utils");
17
18
  /**
@@ -46,7 +47,7 @@ function useForceUpdate() {
46
47
  function useDerivedState(referredState, deps) {
47
48
  const derivedState = (0, react_1.useRef)(void 0);
48
49
  (0, react_1.useMemo)(() => {
49
- // SSR模式下,derivedState会重置2次
50
+ // StrictMode下,derivedState会重置2次
50
51
  derivedState.current = void 0;
51
52
  }, []);
52
53
  const updateState = (state) => {
@@ -136,7 +137,10 @@ function useContainer(container, effectContainer, defaultContainer) {
136
137
  return prev || null;
137
138
  }, [container]);
138
139
  (0, react_1.useEffect)(() => {
139
- const _container = effectContainer || defaultContainer || document.body;
140
+ let _container = effectContainer || defaultContainer;
141
+ if (typeof _container === 'undefined') {
142
+ _container = document.body;
143
+ }
140
144
  if (_container) {
141
145
  const el = typeof _container === 'function' ? _container() : _container;
142
146
  setContainerEl(el);
@@ -187,3 +191,16 @@ function useUpdateEffect(effect, deps) {
187
191
  return effect();
188
192
  }, deps);
189
193
  }
194
+ /**
195
+ * 用法同{@link useMemo},但StrictMode下不会执行两次
196
+ */
197
+ function useStrictMemo(factory, deps) {
198
+ const prevDeps = (0, react_1.useRef)(void 0);
199
+ const memoizedValue = (0, react_1.useRef)(void 0);
200
+ const isDepsChanged = prevDeps.current ? !(0, utils_1.arrayShallowEqual)(prevDeps.current, deps) : true;
201
+ if (isDepsChanged) {
202
+ prevDeps.current = deps;
203
+ return memoizedValue.current = factory();
204
+ }
205
+ return memoizedValue.current;
206
+ }
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
2
  import { cloneElement, isValidElement, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
3
3
  import { useFormContext, useFormStyleContext, useFormValueContext } from './form';
4
- import { clsx, getValueOnChange, queryDeep, stringifyField, useDerivedState, toArray, getShortID, isUnset } from '../../utils';
4
+ import { clsx, getValueOnChange, queryDeep, stringifyField, useDerivedState, toArray, getShortID, isUnset, useStrictMemo } from '../../utils';
5
5
  import { DescriptionItem } from '../descriptions';
6
6
  import { classes } from './form.style';
7
7
  import { Collapse } from '../transitionBase';
@@ -96,7 +96,7 @@ export const FormItem = ({ ref, wrapperRef, field, initialValue, label = '', rul
96
96
  const dependencyValues = useMemo(() => {
97
97
  return formValue && dependencies?.map(d => queryDeep(formValue, d));
98
98
  }, [formValue, ...dependencies || []]);
99
- useMemo(() => {
99
+ useStrictMemo(() => {
100
100
  if (!shouldValidate.current) {
101
101
  // 跳过首次渲染
102
102
  shouldValidate.current = true;
@@ -3,5 +3,5 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
3
  import { clsx, defineInnerClasses, useColor } from '../../utils';
4
4
  const classes = defineInnerClasses('icon');
5
5
  export function Icon({ color, ...props }) {
6
- return (_jsx(FontAwesomeIcon, { ...props, className: clsx(classes.root, props.className), color: useColor(color) }));
6
+ return (_jsx(FontAwesomeIcon, { ...props, className: clsx(classes.root, props.className), color: useColor(color), fontSize: 14 }));
7
7
  }
@@ -64,3 +64,7 @@ export declare function useStrictEffect(effect: EffectCallback, deps?: Dependenc
64
64
  * 用法同{@link useEffect},但会排除首次渲染
65
65
  */
66
66
  export declare function useUpdateEffect(effect: EffectCallback, deps?: DependencyList): void;
67
+ /**
68
+ * 用法同{@link useMemo},但StrictMode下不会执行两次
69
+ */
70
+ export declare function useStrictMemo<T>(factory: () => T, deps?: DependencyList): T | undefined;
@@ -32,7 +32,7 @@ export function useForceUpdate() {
32
32
  export function useDerivedState(referredState, deps) {
33
33
  const derivedState = useRef(void 0);
34
34
  useMemo(() => {
35
- // SSR模式下,derivedState会重置2次
35
+ // StrictMode下,derivedState会重置2次
36
36
  derivedState.current = void 0;
37
37
  }, []);
38
38
  const updateState = (state) => {
@@ -122,7 +122,10 @@ export function useContainer(container, effectContainer, defaultContainer) {
122
122
  return prev || null;
123
123
  }, [container]);
124
124
  useEffect(() => {
125
- const _container = effectContainer || defaultContainer || document.body;
125
+ let _container = effectContainer || defaultContainer;
126
+ if (typeof _container === 'undefined') {
127
+ _container = document.body;
128
+ }
126
129
  if (_container) {
127
130
  const el = typeof _container === 'function' ? _container() : _container;
128
131
  setContainerEl(el);
@@ -173,3 +176,16 @@ export function useUpdateEffect(effect, deps) {
173
176
  return effect();
174
177
  }, deps);
175
178
  }
179
+ /**
180
+ * 用法同{@link useMemo},但StrictMode下不会执行两次
181
+ */
182
+ export function useStrictMemo(factory, deps) {
183
+ const prevDeps = useRef(void 0);
184
+ const memoizedValue = useRef(void 0);
185
+ const isDepsChanged = prevDeps.current ? !arrayShallowEqual(prevDeps.current, deps) : true;
186
+ if (isDepsChanged) {
187
+ prevDeps.current = deps;
188
+ return memoizedValue.current = factory();
189
+ }
190
+ return memoizedValue.current;
191
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canlooks/can-ui",
3
- "version": "0.0.123",
3
+ "version": "0.0.125",
4
4
  "author": "C.CanLiang <canlooks@gmail.com>",
5
5
  "description": "My ui framework",
6
6
  "license": "MIT",