Reactjs 如何打破这些反应表象成分之间的紧密耦合
React应用程序的一些教程/示例显示的数据似乎具有紧密耦合的组件。例如:Reactjs 如何打破这些反应表象成分之间的紧密耦合,reactjs,refactoring,Reactjs,Refactoring,React应用程序的一些教程/示例显示的数据似乎具有紧密耦合的组件。例如: class List extends React.Component { render() { <div className="table-responsive"> <table className="table table-hover"> <thead> <t
class List extends React.Component {
render() {
<div className="table-responsive">
<table className="table table-hover">
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
</tr>
</thead>
<tbody>
{items.map(item => <ListItem key={item.id} ... />)}
</tbody>
</table>
</div>
}
类列表扩展了React.Component{
render(){
A.
B
C
D
{items.map(item=>)}
}
您可以想象ListItem
的样子。没有List
就无法使用ListItem
,因为它们必须共享相同的布局
我不认为这有助于创建可重复使用的组件。有办法解决吗?我认为耦合实际上并没有那么紧密。您只需进行一次更改,即可在渲染循环中使用另一个组件,而
对
一无所知
我看不到任何长期的好处,但您可以通过允许它接受上下文标记作为道具,或作为参数作为高阶组件,使
更通用
function ListItem({ Row='tr', Cell='td', key, item }) {
return (
<Row key={key}>
<Cell>{item}</Cell>
</Row>
);
}
函数列表项({Row='tr',Cell='td',key,item}){
返回(
{item}
);
}
这将允许您通过向下传递不同的标记在非表上下文中使用它
<ListItem key={1} item="foo" Row="div" Cell="span" />
这将呈现为更通用的HTML
<div>
<span>foo</span>
</div>
福
通过让
组件也接受
作为道具,您可以对
执行相同的操作
但我认为这比它们的价值要麻烦得多,而且如果你只是解决示例中相当松散的耦合,那么编写和测试这些通用的解耦会比你浪费更多的时间。我认为耦合实际上没有那么紧密。你只需要做一次更改,就可以使用你的另一个组件r渲染循环和
对
一无所知
我看不到任何长期的好处,但您可以通过允许它接受上下文标记作为道具,或作为参数作为高阶组件,使
更通用
function ListItem({ Row='tr', Cell='td', key, item }) {
return (
<Row key={key}>
<Cell>{item}</Cell>
</Row>
);
}
函数列表项({Row='tr',Cell='td',key,item}){
返回(
{item}
);
}
这将允许您通过向下传递不同的标记在非表上下文中使用它
<ListItem key={1} item="foo" Row="div" Cell="span" />
这将呈现为更通用的HTML
<div>
<span>foo</span>
</div>
福
通过让
组件也接受
作为道具,您可以对
执行相同的操作
但我认为这比它们的价值要麻烦得多,而且如果你只是解决示例中相当松散的耦合,你最终会浪费更多的时间来编写和测试这些通用的解耦。我不太理解你的问题。你认为这里应该抽象什么?@Chris我想他是在建议
是不可重用的,因为它只能在
@DanPrince的上下文中使用。有很多方法可以重新编写它。你有没有要解决的特定问题?没有特定问题,只是觉得编写紧密耦合的组件是不对的。我不太理解你的问题。应该抽象什么你认为呢?@Chris我想他是在暗示
是不可重用的,因为它只能在
@DanPrince的上下文中使用。确切地说,有很多方法可以重新编写它。你有没有想解决的特定问题?没有特定的问题,只是觉得编写紧密耦合的组件是错误的。我想这不是世界末日。因为没有其他人回答这可能没什么大不了的。我想这不是世界末日。因为没有其他人回答这可能没什么大不了的。