Skip to content

Commit 182e169

Browse files
committed
feat: review
1 parent 250a65a commit 182e169

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

docs/examples/useWatch-selector.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ type FieldType = {
1111

1212
export default () => {
1313
const [form] = Form.useForm<FieldType>();
14-
const base = Form.useWatch(values => ({ newName: values.name }), form);
15-
console.log('base', base);
14+
const firstEmptyObject = Form.useWatch(values => ({ newName: values.name }), form);
15+
console.log('firstEmptyObject', firstEmptyObject);
1616

1717
const values = Form.useWatch(
1818
values => ({ init: values.init, newName: values.name, newAge: values.age }),

src/useWatch.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,13 @@ function useWatch(
9292
const options = isFormInstance(_form) ? { form: _form } : _form;
9393
const form = options.form;
9494

95-
const [value, setValue] = useState<any>(
96-
typeof dependencies === 'function' ? dependencies({}) : undefined,
95+
const dependenciesMemo = useMemo(
96+
() => (typeof dependencies === 'function' ? dependencies({}) : undefined),
97+
[dependencies],
9798
);
9899

100+
const [value, setValue] = useState<any>(dependenciesMemo);
101+
99102
const valueStr = useMemo(() => stringify(value), [value]);
100103
const valueStrRef = useRef(valueStr);
101104
valueStrRef.current = valueStr;

tests/useWatch.test.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,4 +518,22 @@ describe('useWatch', () => {
518518
await changeValue(input[0], 'bamboo2');
519519
expect(container.querySelector<HTMLDivElement>('.values')?.textContent).toEqual('bamboo2');
520520
});
521+
it('selector by first no undefined', async () => {
522+
const list: any[] = [];
523+
const Demo = () => {
524+
const [form] = Form.useForm<{ name?: string }>();
525+
const data = Form.useWatch(values => values, form);
526+
list.push(data);
527+
return (
528+
<Form form={form}>
529+
<Field name="name" initialValue="bamboo">
530+
<Input />
531+
</Field>
532+
</Form>
533+
);
534+
};
535+
render(<Demo />);
536+
expect(list[0]).toEqual({});
537+
expect(list[1]).toEqual({ name: 'bamboo' });
538+
});
521539
});

0 commit comments

Comments
 (0)