reactjs - ReactJS/Typescript:子项的类型和属性
问题描述
我有一个组件是网格()。在这个网格中,后者可以有孩子,他们也是我创建的组件。我想知道是否有可能:
- 仅当它们用作我的网格的子组件时才向我的组件添加属性?
- 限制可以在我的网格中用作子组件的组件(例如,只能使用组件)?
非常感谢
解决方案
您可以使用React.Children和React.cloneElement进一步操作子道具
例子
interface ChildProps {
value: string;
}
interface GridProps<T = ChildProps> {
children: React.ReactElement<T>
| React.ReactElement<T>[]
| React.SFC<T>
| React.SFC<T>[]
}
const Grid: React.SFC<GridProps> = ({children}) => {
return <>{React.Children.map(children, (child: any, index) => {
const name: string = child.displayName
|| child.name
|| (child.type || {}).displayName
|| 'Component';
if(name === "Child") {
return null;
}
return child;
})}</>
}
const Child: React.SFC<ChildProps> = ({value}) => {
return <div>
{value}
</div>
}
Child.displayName = "Child";
class App extends React.Component<{}, []> {
public render() {
return (
<div>
<Grid>
<Child value={"Test 1"}/>
<Child value={"Test 2"}/>
</Grid>
</div>
);
}
}
render(<App />, document.getElementById("root"));
如您所见,父组件决定了传递和渲染的内容。
推荐阅读
- nhibernate - 自定义 IConnectionProvider 如何“注入”所需的依赖项?
- excel - VBA:单步执行时复制和粘贴范围作为图片工作,但运行时出现“运行时错误'1004'”
- postgresql - 在 postgresql 中是否可以直接读取
- java - Spring Boot 中的现有客户端验证?
- arrays - 有没有办法在 Tarantool 中存储数组的字段上建立索引?
- postscript - 使用过程作为 ReusableStreamDecode 过滤器的数据源
- sorting - 地图中除数的最佳重构
- html - 尝试更改特定导航栏的格式
- python - Python中的行进广场算法
- angular - 如何让 Angular 客户端通知身份服务器使用哪种登录方法?