diff --git a/package.json b/package.json index 3785dbb..d8bf238 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "classnames": "^2.2.1", "@rc-component/input": "~1.0.0", "@rc-component/resize-observer": "^1.0.0", - "@rc-component/util": "^1.2.0" + "@rc-component/util": "^1.3.0" }, "devDependencies": { "@rc-component/father-plugin": "^2.0.2", diff --git a/src/ResizableTextArea.tsx b/src/ResizableTextArea.tsx index d20b96f..ca73f4e 100644 --- a/src/ResizableTextArea.tsx +++ b/src/ResizableTextArea.tsx @@ -1,8 +1,8 @@ -import classNames from 'classnames'; import ResizeObserver from '@rc-component/resize-observer'; +import useControlledState from '@rc-component/util/lib/hooks/useControlledState'; import useLayoutEffect from '@rc-component/util/lib/hooks/useLayoutEffect'; -import useMergedState from '@rc-component/util/lib/hooks/useMergedState'; import raf from '@rc-component/util/lib/raf'; +import classNames from 'classnames'; import * as React from 'react'; import type { TextAreaProps } from '.'; import calculateAutoSizeStyle from './calculateNodeHeight'; @@ -32,10 +32,11 @@ const ResizableTextArea = React.forwardRef( }; // =============================== Value ================================ - const [mergedValue, setMergedValue] = useMergedState(defaultValue, { + const [internalValue, setMergedValue] = useControlledState( + defaultValue, value, - postState: (val) => val ?? '', - }); + ); + const mergedValue = internalValue ?? ''; const onInternalChange: React.ChangeEventHandler = ( event, diff --git a/src/TextArea.tsx b/src/TextArea.tsx index 67e189b..d1f6ff2 100644 --- a/src/TextArea.tsx +++ b/src/TextArea.tsx @@ -1,9 +1,9 @@ -import clsx from 'classnames'; import { BaseInput } from '@rc-component/input'; import { type HolderRef } from '@rc-component/input/lib/BaseInput'; import useCount from '@rc-component/input/lib/hooks/useCount'; import { resolveOnChange } from '@rc-component/input/lib/utils/commonUtils'; -import useMergedState from '@rc-component/util/lib/hooks/useMergedState'; +import useControlledState from '@rc-component/util/lib/hooks/useControlledState'; +import clsx from 'classnames'; import type { ReactNode } from 'react'; import React, { useEffect, useImperativeHandle, useRef } from 'react'; import ResizableTextArea from './ResizableTextArea'; @@ -45,10 +45,7 @@ const TextArea = React.forwardRef( }, ref, ) => { - const [value, setValue] = useMergedState(defaultValue, { - value: customValue, - defaultValue, - }); + const [value, setValue] = useControlledState(defaultValue, customValue); const formatValue = value === undefined || value === null ? '' : String(value); diff --git a/tests/__snapshots__/allowClear.test.tsx.snap b/tests/__snapshots__/allowClear.test.tsx.snap index db1093c..a9783b9 100644 --- a/tests/__snapshots__/allowClear.test.tsx.snap +++ b/tests/__snapshots__/allowClear.test.tsx.snap @@ -12,6 +12,7 @@ exports[`should support allowClear should not show icon if defaultValue is undef >