限制反应组件中的子组件

Posted

技术标签:

【中文标题】限制反应组件中的子组件【英文标题】:Limit child components in a react component 【发布时间】:2019-10-31 22:05:59 【问题描述】:

我有一个问题,我不确定是否可能。 这是一个示例代码。 我有一个组件,我希望他们每次使用我的组件和一个孩子 它应该只接受特定的组件。

例如:

<tableComponent>
   <tableHeaderComponent/>
   <tableHeaderComponent/>
   <tableHeaderComponent/>
</tableComponent>
but for this type it should not be accepted
<tableComponent>
   <th>blah</th>
   <th>blah2</th>
   <yourowncomponent/>
</tableComponent>

谢谢, 乒乓球

【问题讨论】:

***.com/questions/49706823/… 这可能是您的完美解决方案 好吧,我想说的是,只记录预期的用例而不提供该用例之外的任何支持就足够了。 【参考方案1】:

displayName 分配给您要允许的组件,并在父组件内部检查子组件是否具有允许的displayName

const Good = () => <h1>Good</h1>;

Good.displayName = "Good";

const Bad = () => <h1>Bad</h1>;

const WithGoodOnly = ( children ) => 
  let allowed;
  if (Array.isArray(children)) 
    allowed = children.every(child => child.type.displayName === "Good");
   else 
    allowed = children.type.displayName === "Good";
  

  return allowed ? <div>children</div> : null;
;

渲染

const App = () => (
  <WithGoodOnly>
    <Good />
  </WithGoodOnly>
);

渲染

const App = () => (
  <WithGoodOnly>
    <Good />
    <Good />
  </WithGoodOnly>
);

未渲染

const App = () => (
  <WithGoodOnly>
    <Good />
    <Bad />
  </WithGoodOnly>
);

【讨论】:

以上是关于限制反应组件中的子组件的主要内容,如果未能解决你的问题,请参考以下文章

如何从反应中的子组件内部更改父组件的背景颜色,盖茨比

如何从 vue-fullpage 包装器中的子组件调用 fullpagejs 方法?

如何在反应原生的子组件上重新渲染父组件?

ejabberd 中的外部组件是不是有任何吞吐量限制?

与 JPanel Swing 中的限制组件对齐

反应无状态子组件不会更新父组件中的状态更改