我将 TypeScript 与 React 和Semantic-UI-React一起使用。我想替换现有的表格渲染,它使用固有的“td”元素渲染表格单元格,如下所示:
<td className={cssClass} key={idx} onClick={handleClick}>{txt}</td>
使用 Semantic-UI.React Table.Cell 元素,如下所示:
<Table.Cell className={cssClass} key={idx} onClick={handleClick}>{txt}</Table.Cell>
问题是强类型的“Table.Cell”元素(其属性由 TableCellProps 接口确定)上不存在属性“onClick”,因此无法编译代码。
我的解决方法是在一个元素中组合 Table.Cell 元素,其 props 子类 TableCellProps 如下所示:
interface MyTableCellProps extends TableCellProps {
onClick?: React.EventHandler<React.MouseEvent<any>>;
}
const MyTableCell: React.SFC<MyTableCellProps> = (props) => <Table.Cell {...props} />;
然后将单元格渲染为:
<MyTableCell className={cssClass} key={idx} onClick={handleClick}>{txt}</MyTableCell>
但这会导致嵌套更深的 React 结构(尽管最终的 HTML 渲染看起来还不错)。
我的问题是:在使用 TypeScript 时,是否有更惯用的方式使用 Semantic-UI-React 执行此操作?
Semantic-ui-react 文档中的增强部分和菜单/链接示例中给出了应该有一种方法的提示:
import { Link } from 'react-router'
<Menu>
<Menu.Item as={Link} to='/home'>
Home
</Menu.Item>
</Menu>
他们在哪里发表评论:
额外的道具被传递给你正在渲染的组件。
在这种情况下,'to' 属性不是 Menu.Item 元素可以识别的属性,而是 Link 元素需要的属性。