React 中是否可以根据父组件的 prop 来定义传递(以及是否传递)哪个 prop 给子组件?

Is it possible in React to define which prop to pass (and whether to pass) to child components based on prop from parent component?

基本上想象一下下面的情况,现有的组件有4个:MainComponent1MainComponent2IntermediateComponentChildComponentMainComponent1MainComponent2 可以使用 IntermediateComponent 作为它们的子组件,而 ChildComponentIntermediateComponent.

的子组件

根据哪个组件是 IntermediateComponent 的父组件,IntermediateComponent 传递给 ChildComponent 的道具可以是 2 个选项中的 1 个,也可以是可能某些道具仅适用于 MainComponent1 的后代(至于通过 IntermediateComponent 的间接子代)。

是否可以使用 React 来设置这样的东西:

/* 中间组件 */

<ChildComponent
  color="primary"
  {mainProp === 'MAIN2' ? variant="contained" : variant="outlined"}>
   Example Title
</ChildComponent>

<ChildComponent
  color="primary"
  {mainProp === 'MAIN2' ? variant="contained" : undefined}>
   Example Title
</ChildComponent>

我知道下面的设置是行不通的,所以请把它看成伪代码,但基本上我想要实现的是根据一个道具的价值 (mainProp)正在从 MainComponent1MainComponent2 传递以确定传递给 ChildComponent 的某些道具(在本例中为 variant)是否应该具有特定值甚至通过。

我现在正在尝试在应用程序中组合 2 个组件,它们在整体结构上相似,但必须将不同的道具传递给子组件。什么是实施此类事情的更好解决方案?

简单地有条件地设置值怎么样:

<ChildComponent
  color="primary"
  variant={mainProp === 'MAIN2' ? 'contained' : undefined}
>
   Example Title
</ChildComponent>

如果事情变得更复杂,你总是可以展开:

<ChildComponent
  color="primary"
  ...(mainProp === 'MAIN2' ? { a: 10, b: 11 } : { y: 123 })
>
   Example Title
</ChildComponent>

这将添加 a=10b=11y=123