@td-design/react-native
Version:
react-native UI组件库
53 lines (52 loc) • 1.51 kB
JavaScript
import { useEffect } from 'react';
import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
export default function useRadio(_ref) {
let {
value,
options,
disabledValue,
defaultValue,
onChange
} = _ref;
const [transformedOptions, setTransformedOptions] = useSafeState([]);
useEffect(() => {
const checkedValue = value ?? defaultValue;
const newOptions = options.map(option => {
const checked = checkedValue === option.value;
return {
...option,
disabled: !!(disabledValue !== null && disabledValue !== void 0 && disabledValue.includes(option.value)),
status: checked ? 'checked' : 'unchecked'
};
});
setTransformedOptions(newOptions);
}, [options, value, defaultValue, disabledValue]);
/**
* 1. 选中状态下,设置为未选中
* 2. 未选中状态下,设置为选中
*/
const handleChange = (value, status) => {
if (status === 'unchecked') {
if (onChange) {
onChange(value);
} else {
const newOptions = transformedOptions.map(option => {
if (option.disabled || option.value !== value) return {
...option,
status: 'unchecked'
};
return {
...option,
status: 'checked'
};
});
setTransformedOptions(newOptions);
}
}
};
return {
transformedOptions,
handleChange: useMemoizedFn(handleChange)
};
}
//# sourceMappingURL=useRadio.js.map