根据 true 或 false 属性有条件地渲染组件

Conditionally rendering components based on true or false prop

这应该是一个非常简单的问题。我有以下代码块:

  return (
    <StyledActiveOptions
      className={classNames("lookup-active-options form-control", className)}
      role="button"
      tabIndex="0"
      aria-haspopup="true"
      aria-label={ariaActiveLabel}
      isEnabled={!isDisabled && !isReadOnly}
      onClick={onOpen}
      onFocus={onFocus}
      onKeyDown={onKeyDown}
    >
      {activeOptions.map((option) => (
        <ChoiceOption
          key={option.code}
          option={option}
          optionContentConfiguration={optionContentConfiguration}
          isMultiple={isMultiple}
          isRemovable={!isReadOnly && !isDisabled}
          onRemove={onRemove}
          renderIcon={renderIcon}
        />
      ))}
    </StyledActiveOptions>
  );
};

基本上,我想重构它,以便如果 renderIcon 为真 - 我们 return <ChoiceOptionIcon /> 组件而不仅仅是 ChoiceOption />,反之亦然。我不完全确定限制重复代码但确保两个组件都获得所有道具的最有效方法。谁能给点建议?

我想像这样的东西会起作用

 <StyledActiveOptions
        className={classNames("lookup-active-options form-control", className)}
        role="button"
        tabIndex="0"
        aria-haspopup="true"
        aria-label={ariaActiveLabel}
        isEnabled={!isDisabled && !isReadOnly}
        onClick={onOpen}
        onFocus={onFocus}
        onKeyDown={onKeyDown}
      >
        {activeOptions.map((option) =>
          option.renderIcon ? (
            <div>Put a different component here</div>
          ) : (
            <ChoiceOption
              key={option.code}
              option={option}
              optionContentConfiguration={optionContentConfiguration}
              isMultiple={isMultiple}
              isRemovable={!isReadOnly && !isDisabled}
              onRemove={onRemove}
              renderIcon={renderIcon}
            />
          )
        )}
      </StyledActiveOptions>

当您处于可能必须渲染传递相同(长列表)道具的两个不同组件之一的情况时,您始终可以替换:

import ChildComp1 from '/path';
import ChildComp2 from '/path';

const ParentComp = () => {
  return condition
    ? <ChildComp1 prop1  prop2 ...  propN />
    : <ChildComp2 prop1  prop2 ...  propN />
}

与:

import ChildComp1 from '/path';
import ChildComp2 from '/path';

const ParentComp = () => {
  const ChildToRender = condition ? ChildComp1 : ChildComp2;
  return <ChildToRender prop1  prop2 ...  propN />
}