diff --git a/components/_util/ref.ts b/components/_util/ref.ts index 875b504ffb..78f9957413 100644 --- a/components/_util/ref.ts +++ b/components/_util/ref.ts @@ -15,3 +15,13 @@ export function composeRef(...refs: React.Ref[]): React.Ref { }); }; } + +export function usePrevious(value: T): T | undefined { + const ref = React.useRef(); + + React.useEffect(() => { + ref.current = value; + }, [value]); + + return ref.current; +} diff --git a/components/radio/group.tsx b/components/radio/group.tsx index 40887df6c2..87957acd16 100644 --- a/components/radio/group.tsx +++ b/components/radio/group.tsx @@ -5,6 +5,7 @@ import { RadioGroupProps, RadioChangeEvent, RadioGroupButtonStyle } from './inte import { ConfigContext } from '../config-provider'; import SizeContext from '../config-provider/SizeContext'; import { RadioGroupContextProvider } from './context'; +import { usePrevious } from '../_util/ref'; const RadioGroup: React.FC = props => { const { getPrefixCls, direction } = React.useContext(ConfigContext); @@ -17,10 +18,9 @@ const RadioGroup: React.FC = props => { initValue = props.defaultValue; } const [value, setValue] = React.useState(initValue); - const [prevPropValue, setPrevPropValue] = React.useState(props.value); + const prevPropValue = usePrevious(props.value); React.useEffect(() => { - setPrevPropValue(props.value); if (props.value !== undefined || prevPropValue !== props.value) { setValue(props.value); }