我有一个控制 Select ,以0, 1, 2, 3, 4, 5, '5+', 'unknown'的值react .当 Select 或更改值时,我得到的是每个值的字符串,而不是值0、1、2、3、4和5的数字.

我在Stackoverflow上搜索,发现了一个解决方案,其中值用parseInt包装,但由于我也有字符串作为可能的值,我得到5表示"5+"字符串,NaN表示"未知".

有人提出有效的解决方案吗?

Form component

...    
const { formData, handleInputChange, handleSubmit } = useForm();

const options = [
    { label: 0, value: 0 },
    { label: 1, value: 1 },
    { label: 2, value: 2 },
    { label: 3, value: 3 },
    { label: 4, value: 4 },
    { label: 5, value: 5 },
    { label: '5+', value: '5+' },
    { label: "I don't know", value: 'unknown' },
];

return (
    <form onSubmit={handleSubmit(submit)}>
        <select id="numberOfElectricityMeters" name="numberOfElectricityMeters" value={formData.numberOfElectricityMeters} onChange={handleInputChange}>
            <option value=''>Choose an option</option>
            {options.map((option, i) => (
                <option key={i} value={option.value}>
                    {option.label}
                </option>
            ))}
        </select>

        <select id="numberOfGasMeters" name="numberOfGasMeters" value={formData.numberOfGasMeters} onChange={handleInputChange}>
            <option value=''>Choose an option</option>
            {options.map((option, i) => (
                <option key={i} value={option.value}>
                    {option.label}
                </option>
            ))}
        </select>
    </form>
)

useForm

const handleChange = (e) => {
    if (e.target.type === 'checkbox') {
        setFormData((currentValues) => ({ ...currentValues, [e.target.name]: e.target.checked }));
    } else {
        setFormData((currentValues) => ({ ...currentValues, [e.target.name]: e.target.value }));
    }
};

推荐答案

使用isNaN可以判断值是否包含字符串.(例如:"5+")

const handleChange = (e) => {
   ....
   ....
   var value = !isNaN(e.target.value) && parseInt(e.target.value) ?
               parseInt(e.target.value) : e.target.value;
   setFormData((currentValues) => ({ ...currentValues, [e.target.name]: value }));
   ...
   ...
};

Reactjs相关问答推荐

如何使用React Router创建响应式主详细信息应用程序?

ReferenceError:未在Redux组件中定义窗口

如何在react 流中使用文本区域和改变 node 的输入大小?

REACTJS:在Reaction中根据路由路径更改加载器API URL

根据处于react 状态的数组的名称键,将新对象添加到嵌套的对象数组中

如何获取用户在 GooglePlacesAutocomplete 中输入的文本?

useEffect 和 ReactStrictMode

MERN,将动态列表中的元素插入数组

Yup.number().integer() 不将 1.0 视为小数,如何解决这个问题?

try 从 React JS 构建此教程游戏但无法继续前进

如何修改 react/jsx-no-useless-fragment 规则以允许 <>{children}

从 React 应用程序调用未经身份验证的 graphql 查询时出现错误:没有当前用户

页面不显示

如何在react 中正确销毁上下文?

更新 Next.js 路由查询更改的状态会导致无限循环

在 redux 工具包中使用 dispatch 发送多个操作

react-admin useGetIdentity 只返回全名,id 未定义 头像未定义

如何将 id 从页面传递到另一个页面?

试图将页面限制为仅登录但有条件的用户似乎永远不会运行

如何将本地视频文件上传到 Google Cloud