尝试实现钩子时如何解决错误
How to solve error when trying to implement hook
我想创建一个挂钩来放置我的菜单的状态和事件函数。但是当我在这个组件中导入点击功能时,出现如下错误:
“没有开销匹配此调用。
2 重载中的 1,'(props: { slot?: string | undefined; style?: CSSProperties | undefined; title?: string | undefined; ref?: ((instance: HTMLDivElement | null) => void) | RefObject< ...> | null | undefined; ... 251 更多 ...; onTransitionEndCapture?: TransitionEventHandler<...> | undefined; } & { ...; } & { ...; }): ReactElement<. ..>',产生了以下错误。
无法将类型 'boolean | (() => void)' 分配给类型 'MouseEventHandler | Undefined'。
无法将类型 'boolean' 分配给类型 'MouseEventHandler'。"
我该如何解决?
import { useState } from "react";
export const useMenu = () => {
const [openCardOptions, setOpenCardOptions] = useState(false);
const handleOpenCardOptions = () => {
setOpenCardOptions(!openCardOptions);
};
return [openCardOptions, handleOpenCardOptions]
}
import { useMenu } from "../../hooks/useMenu";
export const NoteCard = () => {
const [openCardOptions, handleOpenCardOptions] = useMenu()
return (
<Container>
<TopBar>
<ImgContainer>
<img src={noteImg} alt="Note" />
</ImgContainer>
<Menu onClick={handleOpenCardOptions}>
<img src={menuImg} alt="Menu" />
{openCardOptions && (
<CardOptions>
<div>
<img src={viewImg} alt="View" />
<p>Visualizar</p>
</div>
<div>
<img src={pencilImg} alt="Pencil" />
<p>Editar</p>
</div>
<div>
<img src={binImg} alt="Bin" />
<p>Deletar</p>
</div>
</CardOptions>
)}
</Menu>
尝试将函数的 return 语句更改为
return [openCardOptions, handleOpenCardOptions] as const;
如果您检查 useMenu()
的现有 return 类型,您会看到它 returns Array<boolean | (() => void)>
--一个变量数组,其中每个项目都可以是布尔值或函数。不过这不是您要找的。
您希望 return 类型是元组,其中第一项始终是布尔值,第二项始终是函数。 as const
告诉 TypeScript 将数组文字视为元组而不是数组(除其他外,noted here)。
如果这样更有意义,您还可以明确写出 useMenu 的 return 类型:
export const useMenu = (): [boolean, () => void] => {
我想创建一个挂钩来放置我的菜单的状态和事件函数。但是当我在这个组件中导入点击功能时,出现如下错误:
“没有开销匹配此调用。 2 重载中的 1,'(props: { slot?: string | undefined; style?: CSSProperties | undefined; title?: string | undefined; ref?: ((instance: HTMLDivElement | null) => void) | RefObject< ...> | null | undefined; ... 251 更多 ...; onTransitionEndCapture?: TransitionEventHandler<...> | undefined; } & { ...; } & { ...; }): ReactElement<. ..>',产生了以下错误。 无法将类型 'boolean | (() => void)' 分配给类型 'MouseEventHandler | Undefined'。 无法将类型 'boolean' 分配给类型 'MouseEventHandler'。"
我该如何解决?
import { useState } from "react";
export const useMenu = () => {
const [openCardOptions, setOpenCardOptions] = useState(false);
const handleOpenCardOptions = () => {
setOpenCardOptions(!openCardOptions);
};
return [openCardOptions, handleOpenCardOptions]
}
import { useMenu } from "../../hooks/useMenu";
export const NoteCard = () => {
const [openCardOptions, handleOpenCardOptions] = useMenu()
return (
<Container>
<TopBar>
<ImgContainer>
<img src={noteImg} alt="Note" />
</ImgContainer>
<Menu onClick={handleOpenCardOptions}>
<img src={menuImg} alt="Menu" />
{openCardOptions && (
<CardOptions>
<div>
<img src={viewImg} alt="View" />
<p>Visualizar</p>
</div>
<div>
<img src={pencilImg} alt="Pencil" />
<p>Editar</p>
</div>
<div>
<img src={binImg} alt="Bin" />
<p>Deletar</p>
</div>
</CardOptions>
)}
</Menu>
尝试将函数的 return 语句更改为
return [openCardOptions, handleOpenCardOptions] as const;
如果您检查 useMenu()
的现有 return 类型,您会看到它 returns Array<boolean | (() => void)>
--一个变量数组,其中每个项目都可以是布尔值或函数。不过这不是您要找的。
您希望 return 类型是元组,其中第一项始终是布尔值,第二项始终是函数。 as const
告诉 TypeScript 将数组文字视为元组而不是数组(除其他外,noted here)。
如果这样更有意义,您还可以明确写出 useMenu 的 return 类型:
export const useMenu = (): [boolean, () => void] => {