Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ReactJS中处理类似组件的最佳方法?_Reactjs_Components_React Component - Fatal编程技术网

在ReactJS中处理类似组件的最佳方法?

在ReactJS中处理类似组件的最佳方法?,reactjs,components,react-component,Reactjs,Components,React Component,假设一个项目中有两个相似的组件。其中一个只包含额外的按钮,其他功能完全相同。创建这些组件的最佳方法是什么?我举了一个例子,你可以更清楚地理解我的意思(请省略一些小错误,如不使用关键道具等),因为这个例子肯定会更复杂 我想的一些解决方案 1-我可以通过控制道具和使用三元操作来渲染按钮。(我认为这会导致不必要的检查) 2-创建两个单独的组件(我在示例中所做的)。(看起来不干) 3-HOC可以使用,但我无法理解 如果有特别的解决方案或其他合理的方案,请与我们分享,提前感谢 我也分享代码 const S

假设一个项目中有两个相似的组件。其中一个只包含额外的按钮,其他功能完全相同。创建这些组件的最佳方法是什么?我举了一个例子,你可以更清楚地理解我的意思(请省略一些小错误,如不使用关键道具等),因为这个例子肯定会更复杂

我想的一些解决方案

1-我可以通过控制道具和使用三元操作来渲染按钮。(我认为这会导致不必要的检查)

2-创建两个单独的组件(我在示例中所做的)。(看起来不干)

3-HOC可以使用,但我无法理解

如果有特别的解决方案或其他合理的方案,请与我们分享,提前感谢

我也分享代码

const SelectionCard = ({ name }) => {
  return (
    <div className={classes.Card}>
      <h1>{name}</h1>
    </div>
  );
};

const SelectionCard=({name})=>{
返回(
{name}
);
};
const AlmostSameCard=({name})=>{
返回(
{name}
{name}
);
};
编辑:大多数答案都集中在我给出的例子上。我们应该如何处理边缘情况,如条件太多、渲染数据太大等。

条件元素 组件将基于您传递的道具进行渲染。您应该呈现对该组件有意义的元素。但是要确保组件不会因为大的条件部分而膨胀

您的卡组件可以有可选元素,如日期、文本、标签和标签。只需有条件地渲染包含内容的部分

const SelectionCard = ({ name, buttonText }) => {
  return (
    <div className={classes.Card}>
      <h1>{name}</h1>
      {buttonText && <button>{buttonText}</button>}
    </div>
  );
};
const SelectionCard=({name,buttonext})=>{
返回(
{name}
{buttonext&&{buttonext}
);
};

传递一个道具并使用
条件渲染
似乎很简单;考虑到有4个不同的道具,我应该放4个不同的IF块或开关吗?如果需要只使用一个组件,则需要控制PROP,并且使用三进制检查。
const SelectionCard = ({ name, buttonText }) => {
  return (
    <div className={classes.Card}>
      <h1>{name}</h1>
      {buttonText && <button>{buttonText}</button>}
    </div>
  );
};