我想只允许特定的组件作为孩子。例如,假设我有一个Menu组件,它应该只包含MenuItem
作为子组件,如下所示:
<Menu>
<MenuItem />
<MenuItem />
</Menu>
因此,当我尝试将另一个组件作为子组件时,我希望Typescript在IDE中抛出一个错误。有东西警告我,我应该只作为孩子使用MenuItem
。例如,在这种情况下:
<Menu>
<div>My item</div>
<div>My item</div>
</Menu>
此线程几乎类似,但不包括TypeScript解决方案。我想知道这个问题是否可以使用TypeScript类型和接口来解决。在我想象的世界中,它看起来是这样的,但是当然类型检查不起作用,因为子组件有一个Element
类型:
js prettyprint-override">type MenuItemType = typeof MenuItem;
interface IMenu {
children: MenuItemType[];
}
const MenuItem: React.FunctionComponent<IMenuItem> = ({ props }) => {
return (...)
}
const Menu: React.FunctionComponent<IMenu> = ({ props }) => {
return (
<nav>
{props.children}
</nav>
)
}
const App: React.FunctionComponent<IApp> = ({ props }) => {
return (
<Menu>
<MenuItem />
<MenuItem />
</Menu>
)
}
有没有办法用Typescript实现这一点?是否要使用仅与特定组件相关的内容扩展元素类型?
或者,有什么好的方法可以确保子组件是特定组件的实例?无需添加查看子组件displayName的条件。
要做到这一点,您需要从子组件(最好也是父组件)提取props接口,并以这种方式使用它:
interface ParentProps {
children: ReactElement<ChildrenProps> | Array<ReactElement<ChildrenProps>>;
}
因此,在您的情况下,它将如下所示:
js prettyprint-override">interface IMenu {
children: ReactElement<IMenuItem> | Array<ReactElement<IMenuItem>>;
}
const MenuItem: React.FunctionComponent<IMenuItem> = ({ props }) => {
return (...)
}
const Menu: React.FunctionComponent<IMenu> = ({ props }) => {
return (
<nav>
{props.children}
</nav>
)
}
这个问题被问了好几次,我花了好几个小时来研究答案。但是,我无法使我的代码正常工作。问题就在这里。 我有一个组件,它是一个包装器。我有多个组件作为子组件进入组件。 在我的组件中,我想创建一个新的子数组,它只由组件组成。我只想忽略其他一切。同时在控制台上显示一些警告,除了组件子元素之外的任何内容都将被忽略,这很好,但无论如何,这在这一点上并不重要。 问题是,我正在使用TypeScript,无法访问。
我有一个组件和一个组件,当有一个子组件不是组件时,我想抛出一个错误。这是可能的,还是我试图解决错误的问题?
问题内容: 我有一个组件和一个组件,当有不是组件的子代时,我想抛出一个错误。这可能吗,还是我想解决错误的问题? 问题答案: 您可以为每个孩子使用displayName,可通过以下类型进行访问:
因此,我创建了2个 但后来我意识到2不是一个好主意,所以我添加了,然后尝试以的形式添加不同的选项卡。但是我不能像在中那样定位组件,它看起来是这样的。 但我希望它是这样的 我怎么能这么做?
问题内容: 我正在将React.js与TypeScript一起使用。有什么方法可以创建从其他组件继承但具有一些其他道具/状态的React组件? 我想要达到的目标是这样的: 但是,如果我把这个会失败中,我得到一个错误的打字稿(类型的参数是不能分配给类型)。我想这不是TypeScript专用的东西,而是将继承与泛型(?)混合使用的一般限制。是否有任何类型安全的解决方法? 更新 我选择的解决方案(基于D
我有一个应用程序正在使用类组件开发react,我发现了一个功能的代码,我想添加到我的代码中,但它是使用功能组件制作的。代码在这里https://codesandbox.io/s/framer-motion-animate-in-view-gqcc8 但相关部分是这样的。 我不知道如何在我的类组件中添加那个控件变量 我应该把它添加到我的州吗?我不明白如何让它在类组件中工作