将钩子传递给子打字稿的问题

Posted

技术标签:

【中文标题】将钩子传递给子打字稿的问题【英文标题】:issue with passing hook to child typescript 【发布时间】:2019-07-01 16:46:15 【问题描述】:

我有一个使用钩子的反应组件。我的父组件如下所示:

const Parent = () => 

   const [isActive, setIsActive] = useState(false);

   return (
     <Child isActive=isActive setIsActive=setIsActive />
   );

这是子组件

type Props = 
   isActive: boolean;
   setIsActive: () => void;

const Child = ( isActive, setIsActive: Props) 
   // component
 

我看到的错误是

类型错误:类型“Dispatch ”不可分配给 > 类型“() => void”。 TS2322

【问题讨论】:

setIsActive 函数应始终为 isActive 返回新状态。所以,你不能使用 type () => void; void 表示,您没有返回值。尝试通过任何(或 isActive 类型)来修复 void。 【参考方案1】:

ChildProps 类型不正确。 React 将setIsActive 类型为Dispatch,其定义为:

type Dispatch<A> = (value: A) => void;

您的类型缺少 value 参数。这应该是正确的(另请注意,它需要是冒号而不是等号):

type Props = 
   isActive: boolean;
   setIsActive: (active: boolean) => void;

const Child = ( isActive, setIsActive: Props) 
   // rest of the component
 

【讨论】:

以上是关于将钩子传递给子打字稿的问题的主要内容,如果未能解决你的问题,请参考以下文章

带有打字稿的MongoDB聚合

如何在带有打字稿的反应功能组件中定义自定义道具?

使用打字稿的反应表出了点问题

使用带有打字稿的 react-router

用于构建打字稿的 NPM 脚本不起作用

带有打字稿的角度材料设计