@canlooks/can-ui 0.0.122 → 0.0.124
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.
- package/dist/cjs/components/form/formItem.js +1 -1
- package/dist/cjs/components/icon/icon.js +1 -1
- package/dist/cjs/utils/hooks.d.ts +4 -0
- package/dist/cjs/utils/hooks.js +15 -1
- package/dist/cjs/utils/style.js +9 -6
- package/dist/esm/components/form/formItem.js +2 -2
- package/dist/esm/components/icon/icon.js +1 -1
- package/dist/esm/utils/hooks.d.ts +4 -0
- package/dist/esm/utils/hooks.js +14 -1
- package/dist/esm/utils/style.js +9 -6
- package/package.json +1 -1
|
@@ -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,
|
|
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;
|
package/dist/cjs/utils/hooks.js
CHANGED
|
@@ -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
|
-
//
|
|
50
|
+
// StrictMode下,derivedState会重置2次
|
|
50
51
|
derivedState.current = void 0;
|
|
51
52
|
}, []);
|
|
52
53
|
const updateState = (state) => {
|
|
@@ -187,3 +188,16 @@ function useUpdateEffect(effect, deps) {
|
|
|
187
188
|
return effect();
|
|
188
189
|
}, deps);
|
|
189
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* 用法同{@link useMemo},但StrictMode下不会执行两次
|
|
193
|
+
*/
|
|
194
|
+
function useStrictMemo(factory, deps) {
|
|
195
|
+
const prevDeps = (0, react_1.useRef)(void 0);
|
|
196
|
+
const memoizedValue = (0, react_1.useRef)(void 0);
|
|
197
|
+
const isDepsChanged = prevDeps.current ? !(0, utils_1.arrayShallowEqual)(prevDeps.current, deps) : true;
|
|
198
|
+
if (isDepsChanged) {
|
|
199
|
+
prevDeps.current = deps;
|
|
200
|
+
return memoizedValue.current = factory();
|
|
201
|
+
}
|
|
202
|
+
return memoizedValue.current;
|
|
203
|
+
}
|
package/dist/cjs/utils/style.js
CHANGED
|
@@ -200,14 +200,17 @@ function useResponsiveValue(prop, disabled = false) {
|
|
|
200
200
|
const syncBreakpoints = (0, hooks_1.useSync)(breakpoints);
|
|
201
201
|
const fn = () => {
|
|
202
202
|
let maxBreakpoint = 'xs';
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
203
|
+
if (typeof window !== 'undefined') {
|
|
204
|
+
for (const k in syncBreakpoints.current) {
|
|
205
|
+
if (window.innerWidth < syncBreakpoints.current[k]) {
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
if (k in responsiveObj) {
|
|
209
|
+
maxBreakpoint = k;
|
|
210
|
+
}
|
|
209
211
|
}
|
|
210
212
|
}
|
|
213
|
+
console.log(234, responsiveObj, maxBreakpoint, responsiveObj[maxBreakpoint]);
|
|
211
214
|
return responsiveObj[maxBreakpoint];
|
|
212
215
|
};
|
|
213
216
|
const [value, setValue] = (0, hooks_1.useDerivedState)(fn, [breakpoints]);
|
|
@@ -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
|
-
|
|
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;
|
package/dist/esm/utils/hooks.js
CHANGED
|
@@ -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
|
-
//
|
|
35
|
+
// StrictMode下,derivedState会重置2次
|
|
36
36
|
derivedState.current = void 0;
|
|
37
37
|
}, []);
|
|
38
38
|
const updateState = (state) => {
|
|
@@ -173,3 +173,16 @@ export function useUpdateEffect(effect, deps) {
|
|
|
173
173
|
return effect();
|
|
174
174
|
}, deps);
|
|
175
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* 用法同{@link useMemo},但StrictMode下不会执行两次
|
|
178
|
+
*/
|
|
179
|
+
export function useStrictMemo(factory, deps) {
|
|
180
|
+
const prevDeps = useRef(void 0);
|
|
181
|
+
const memoizedValue = useRef(void 0);
|
|
182
|
+
const isDepsChanged = prevDeps.current ? !arrayShallowEqual(prevDeps.current, deps) : true;
|
|
183
|
+
if (isDepsChanged) {
|
|
184
|
+
prevDeps.current = deps;
|
|
185
|
+
return memoizedValue.current = factory();
|
|
186
|
+
}
|
|
187
|
+
return memoizedValue.current;
|
|
188
|
+
}
|
package/dist/esm/utils/style.js
CHANGED
|
@@ -184,14 +184,17 @@ export function useResponsiveValue(prop, disabled = false) {
|
|
|
184
184
|
const syncBreakpoints = useSync(breakpoints);
|
|
185
185
|
const fn = () => {
|
|
186
186
|
let maxBreakpoint = 'xs';
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
187
|
+
if (typeof window !== 'undefined') {
|
|
188
|
+
for (const k in syncBreakpoints.current) {
|
|
189
|
+
if (window.innerWidth < syncBreakpoints.current[k]) {
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
if (k in responsiveObj) {
|
|
193
|
+
maxBreakpoint = k;
|
|
194
|
+
}
|
|
193
195
|
}
|
|
194
196
|
}
|
|
197
|
+
console.log(234, responsiveObj, maxBreakpoint, responsiveObj[maxBreakpoint]);
|
|
195
198
|
return responsiveObj[maxBreakpoint];
|
|
196
199
|
};
|
|
197
200
|
const [value, setValue] = useDerivedState(fn, [breakpoints]);
|