typescript - React useState 道具:类型“字符串”不可分配给类型“数字”。TS2322
问题描述
我正在尝试将 Props 传递给 React useState Hooks。我的道具和数字都是必需的,但我收到 Typescript 错误:
类型“字符串”不可分配给类型“数字”。TS2322
但我没有在任何地方传递字符串。所以,我不知道为什么我会得到这个 Typescript。我不想通过 props any
。
import React, { useState } from "react";
import ReactDOM from "react-dom";
interface Props {
strength: number;
speed: number;
}
const Courseinfo = ({ strength, speed }: Props) => (
<>
<div>
<h1>{strength}</h1>
<h1>{speed}</h1>
</div>
</>
);
const App = () => {
const [character, setCharacter] = useState<Props>({ // This Props throws me error
strength: 0,
speed: 0,
});
const { strength, speed } = character;
return (
<>
Strength:
<input
type="number"
value={strength}
onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setCharacter({ ...character, strength: e.target.value })
}
/>
Speed:
<input
type="number"
value={speed}
onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
setCharacter({ ...character, speed: e.target.value })
}
/>
<Courseinfo strength={strength} speed={speed} />
</>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
解决方案
input type="number"
的值是一个字符串
这是固定的沙箱。
变化:
interface Props {
strength: string;
speed: string;
}
和事件的类型可以是
onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
或者,您也可以转换event.target.value
为数字(+event.target.number
)而不是更改道具类型。
推荐阅读
- c - 当 C 中预期无符号 int 时将字符串传递给函数
- javascript - state.map(state, i) 给出未定义的
- tcp - 如何在 tcpdump 中捕获 TCP/IP 碎片?
- javascript - 从 Twitter 获取基本个人资料,没有请求限制
- css - 如何防止下拉切换按钮改变它自己的宽度
- android - 在不使用 Room 的情况下使用 LiveData 和 ViewModel
- c++ - QT 和新的信号槽语法,用于 QApplication::quit 外部主函数的槽
- javascript - window.location.href 和 **.replace 连接 URL 而不是替换?
- javascript - 在 PHP 的新选项卡中打开超链接
- java - 仅从 Android Studio 上的 JAVA 中的 JSON api 获取字符串