Reactjs 如何打破这些反应表象成分之间的紧密耦合

Reactjs 如何打破这些反应表象成分之间的紧密耦合,reactjs,refactoring,Reactjs,Refactoring,React应用程序的一些教程/示例显示的数据似乎具有紧密耦合的组件。例如: class List extends React.Component { render() { <div className="table-responsive"> <table className="table table-hover"> <thead> <t

React应用程序的一些教程/示例显示的数据似乎具有紧密耦合的组件。例如:

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的上下文中使用。确切地说,有很多方法可以重新编写它。你有没有想解决的特定问题?没有特定的问题,只是觉得编写紧密耦合的组件是错误的。我想这不是世界末日。因为没有其他人回答这可能没什么大不了的。我想这不是世界末日。因为没有其他人回答这可能没什么大不了的。