Mos*_*she 8 javascript typescript reactjs
我正在尝试使用 React 和 Typescript 创建一个简单的汉堡菜单组件。我想要做的是将onClick事件处理程序作为道具传递给这个菜单组件。这是我目前拥有的代码:
function Hamburger({ onClick }) {
return (
<Box
as="button"
type="button"
p="1"
fontSize="2xl"
color="gray.600"
onClick={onClick}
display={{ base: "block", lg: "none" }}
>
<HiOutlineMenu />
</Box>
)
}
Run Code Online (Sandbox Code Playgroud)
然而,打字稿抱怨{onClick}正在传递的道具:
Binding element 'onClick' implicitly has an 'any' type
Run Code Online (Sandbox Code Playgroud)
我认为我可以通过将鼠标悬停在组件onClick中的键上Box并查看所采用的类型来解决此问题onClick。将鼠标悬停在该键上会产生以下消息:
因此,我想将{onClick}prop 修改如下:
function Hamburger({ onClick }: React.MouseEventHandler | undefined) {
Run Code Online (Sandbox Code Playgroud)
但这只会产生一个新错误{onClick}:
Property 'onClick' does not exist on type 'MouseEventHandler<Element> | undefined'.ts(2339)
var onClick: any
Run Code Online (Sandbox Code Playgroud)
我现在不知道该怎么办。因此,我想知道 - 我应该如何打字{onClick}?
谢谢。
ale*_*xor 16
功能组件的正确键入Hamburger是:
function Hamburger({ onClick }: { onClick? : React.MouseEventHandler }): JSX.Element {
// actual code
}
Run Code Online (Sandbox Code Playgroud)
随着 props 数量的增加,内联类型声明可能会变得混乱。因此,将它们移至指定类型是一个好习惯:
type Props = {
onClick?: React.MouseEventHandler
}
function Hamburger({ onClick }: Props) JSX.Element {
// actual code
}
Run Code Online (Sandbox Code Playgroud)
如果稍后您必须接受children此组件中的 prop,它也有好处。然后你可以使用React.FChelperProps类型:
const Hamburger: React.FC<Props> = ({ onClick, children }) => { // no need to type `children` prop yourself
// actual code
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19412 次 |
| 最近记录: |