Reactjs 如何处理值为number类型的受控输入元素中的NaN
在下面的代码片段这样的情况下,如果状态类型为Reactjs 如何处理值为number类型的受控输入元素中的NaN,reactjs,typescript,parseint,react-tsx,Reactjs,Typescript,Parseint,React Tsx,在下面的代码片段这样的情况下,如果状态类型为number,我应该如何处理NaN 服务器发送一个对象数组: interface MyInterface {id:number, amount:number, score:number} // The received data is of type MyInterface[] 因此,这里的空输入将导致NaN,警告:收到了值属性的NaN。如果需要,请将该值转换为字符串。 以防我检查情况 isNaN(parseInt(e.target.value))我
number
,我应该如何处理NaN
服务器发送一个对象数组:
interface MyInterface {id:number, amount:number, score:number}
// The received data is of type MyInterface[]
因此,这里的空输入将导致NaN
,警告:收到了值属性的NaN。如果需要,请将该值转换为字符串。
以防我检查情况
isNaN(parseInt(e.target.value))
我应该用什么更新状态?通常,在这种情况下,如何使输入为空
const App:React.FC<Props>=(props:Props)=> {
const [data, setData] = React.useState<MyInterface[]>(props.values);
const handleChange = (e: ChangeEvent<HTMLInputElement>,id:number) => {
const amount = parseInt(e.target.value, 10);
const temp:MyInterface[] = data.map(d => d.id === id? {...d,amount} : d)
setData(temp);
};
const upload = ()=> { /* POST the state array to server */}
return (
<>
{data.map(d=> (
<div>
<input value={d.amount} onChange={handleChange} />
<button onClick={upload}/>
</div>
))}
</>
);
}
const-App:React.FC=(道具:道具)=>{
const[data,setData]=React.useState(props.values);
常量handleChange=(e:ChangeEvent,id:number)=>{
const amount=parseInt(即target.value,10);
常量temp:MyInterface[]=data.map(d=>d.id==id?{…d,amount}:d)
设置数据(温度);
};
const upload=()=>{/*将状态数组发布到服务器*/}
返回(
{data.map(d=>(
))}
);
}
这真让人讨厌。我们自己解决了这个问题,我能想到的唯一解决方案是禁止向用户显示这个特定错误。将状态更改为字符串,在handleChange
中添加一个条件以允许空值。什么?!状态是数字类型,它是从开放式API自动生成的,我无法更改它,糟糕的是,对我来说,状态类型更改可以解决问题,这就是我在这里提问的原因。状态是在组件中定义的,不清楚“从开放式API自动生成”是什么意思。我建议更新问题,解释为什么更改状态类型对您不起作用。@AlexeyLebedev状态来自何处并不重要,它定义为number
,我不是在搜索更改状态解决方案,对字符串的更改非常明显,因此不需要在此处提出问题您也可以将NaN
呈现为空字符串:value={isNaN(value)?'':value}
,但我认为更改状态类型更干净。