From efbd11519c625f5659fcfab2f88c69eacf5132ea Mon Sep 17 00:00:00 2001 From: Scenery <1507337624@qq.com> Date: Wed, 20 Dec 2023 17:26:30 +0800 Subject: [PATCH 1/2] fix: number input ref bug --- packages/input-number/src/input-number.tsx | 30 ++++++++++++++++------ packages/input-number/src/interface.ts | 3 ++- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/packages/input-number/src/input-number.tsx b/packages/input-number/src/input-number.tsx index d30d1ffe8..8b98fc2bb 100644 --- a/packages/input-number/src/input-number.tsx +++ b/packages/input-number/src/input-number.tsx @@ -1,9 +1,15 @@ -import { forwardRef, MutableRefObject, useCallback, useRef } from "react" +import { + forwardRef, + MutableRefObject, + useCallback, + useImperativeHandle, + useRef, +} from "react" import { InputNumberProps } from "./interface" import { Input } from "@illa-design/input" import { DownIcon, MinusIcon, PlusIcon, UpIcon } from "@illa-design/icon" import { Space } from "@illa-design/space" -import { isNumber, useMergeValue } from "@illa-design/system" +import { isNumber, mergeRefs, useMergeValue } from "@illa-design/system" import { applyActionIconStyle, applyControlBlockStyle, @@ -33,6 +39,7 @@ export const InputNumber = forwardRef( defaultValue, value, icons, + inputRef, formatter, parser, onChange, @@ -44,9 +51,16 @@ export const InputNumber = forwardRef( defaultValue, }) - const inputRef = + const currentInputRef = useRef() as MutableRefObject + // useImperativeHandle(inputRef, () => ({ + // ...currentInputRef.current, + // focus: () => { + // currentInputRef.current.focus() + // }, + // })) + const plusStep = useCallback((): void => { const currentNumber = Number(finalValue) @@ -103,7 +117,7 @@ export const InputNumber = forwardRef(
{ - inputRef.current.focus() + currentInputRef.current.focus() plusStep() }} > @@ -112,7 +126,7 @@ export const InputNumber = forwardRef(
{ - inputRef.current.focus() + currentInputRef.current.focus() minusStep() }} > @@ -148,7 +162,7 @@ export const InputNumber = forwardRef( return ( ( }} onPressEnter={() => { const rawValue = parser - ? parser(inputRef.current.value) - : inputRef.current.value + ? parser(currentInputRef.current.value) + : currentInputRef.current.value const dealNum = dealNumber(rawValue) diff --git a/packages/input-number/src/interface.ts b/packages/input-number/src/interface.ts index 76a1a7e1e..b19446458 100644 --- a/packages/input-number/src/interface.ts +++ b/packages/input-number/src/interface.ts @@ -1,4 +1,4 @@ -import { InputHTMLAttributes, ReactNode, SyntheticEvent } from "react" +import { InputHTMLAttributes, ReactNode, Ref, SyntheticEvent } from "react" import { BoxProps } from "@illa-design/theme" export type InputNumberSize = "small" | "medium" | "large" @@ -47,6 +47,7 @@ export interface InputNumberProps plus?: ReactNode minus?: ReactNode } + inputRef?: Ref onChange?: (value: number | undefined) => void onKeyDown?: (e: SyntheticEvent) => void parser?: (value: number | string) => number From cc87319246c7041854b616ca9e012c4a7ed7c1ee Mon Sep 17 00:00:00 2001 From: Scenery <1507337624@qq.com> Date: Wed, 20 Dec 2023 17:49:19 +0800 Subject: [PATCH 2/2] fix: number input ref bug --- packages/input-number/src/input-number.tsx | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/packages/input-number/src/input-number.tsx b/packages/input-number/src/input-number.tsx index 8b98fc2bb..7bb9683dc 100644 --- a/packages/input-number/src/input-number.tsx +++ b/packages/input-number/src/input-number.tsx @@ -1,10 +1,4 @@ -import { - forwardRef, - MutableRefObject, - useCallback, - useImperativeHandle, - useRef, -} from "react" +import { forwardRef, MutableRefObject, useCallback, useRef } from "react" import { InputNumberProps } from "./interface" import { Input } from "@illa-design/input" import { DownIcon, MinusIcon, PlusIcon, UpIcon } from "@illa-design/icon" @@ -54,13 +48,6 @@ export const InputNumber = forwardRef( const currentInputRef = useRef() as MutableRefObject - // useImperativeHandle(inputRef, () => ({ - // ...currentInputRef.current, - // focus: () => { - // currentInputRef.current.focus() - // }, - // })) - const plusStep = useCallback((): void => { const currentNumber = Number(finalValue)