有没有办法让我的子组件知道父组件的props类型?
我不想将它们硬编码到孩子中,因为孩子将被多个父母使用,props略有不同。
一个简化的例子:
// Parent.tsx
import React, {ReactElement} from "react";
interface Row {
id: string;
name: string;
tags: string[];
}
const Parent = (): ReactElement => {
const rows: Row[] = [
{
id: "1",
name: "Foo",
tags: ["new"],
},
{
id: "1",
name: "Bar",
tags: ["new", "sale"],
},
];
const formatRow = (row: Row): ReactElement => (
<tr key={row.id}>
<td>{row.id}</td>
<td>{row.name}</td>
<td>{row.tags.map(tag => <strong>{tag}</strong>)}</td>
</tr>
);
return <Child formatRow={formatRow} rows={rows} />;
};
export default Parent;
// Child.tsx
import React, {ReactElement} from "react";
const Child = ({formatRow, rows}): ReactElement => {
const columnCount = Object.keys(rows[0]).length;
return (
<table>
<tbody>
{rows.map(row => formatRow(row))}
</tbody>
<tfoot>
<tr>
<td colSpan={columnCount}>Footer</td>
</tr>
</tfoot>
</table>
);
};
export default Child;
然后也可能有另一个父级,Parent2
具有这种形状,用于它自己的实现Row
:
// Parent2.tsx
interface Row {
id: string;
count: number;
}
const Parent2 = (): ReactElement => {
// similar code to `Parent` here
};
export default Parent2;
我不确定如何让Child
组件知道formatRow
期望 aRow
并返回 a ReactElement
,并且 rows 是一个Row
对象数组?
我认为泛型可能是答案,但我对此知之甚少,因此无论是泛型还是其他方面的任何帮助都会受到赞赏。