React:如何将不同类型的子组件动态附加到父组件中?

Posted

技术标签:

【中文标题】React:如何将不同类型的子组件动态附加到父组件中?【英文标题】:React: How to dynamically append child components of differing types into a parent component? 【发布时间】:2017-05-21 20:47:19 【问题描述】:

我正在尝试通过根据传递给<ParentComponent/> 的道具值附加各种子组件<ChildComponen1/>, <ChildComponen3/>, <ChildComponen3/> 来动态设置组件<ParentComponent/> 的内容。父组件是一个列表,子组件是具有不同内容(css、html)的列表项

下面我详细介绍了一种我认为适合这种情况的方法,但是如果您有另一种(更有效的)方法来实现使用各种不同的子组件动态填充父组件的指定目标,您的见解将是最欣赏。 谢谢

class ParentComponent extends React.Component
    render()
       return(

            <ComponentSwitch type="ChildComponen1"/>  
            <ComponentSwitch type="ChildComponen2"/>
      )
    



class ComponentSwitch extends React.Component
    render()
          return(
            //How would I most effectively create a switch here?
          )
    


...child components omitted for brevity

实现此功能最有效和最高效的方法是什么? 谢谢

【问题讨论】:

【参考方案1】:

只需编写一些 javascript... 这里有很多可能性,例如:

class ComponentSwitch extends React.Component 
  renderA() 
    return (
      <div>
        ... lot of child components here
      </div>
    );
  

  render() 
    if (this.props.a) 
      return this.renderA();
    

    return <B />;
  

或者使用switch 语句并返回组件进行渲染。不管你做什么

class ComponentSwitch extends React.Component 
  render() 
    switch (this.props.component) 
      case 'a':
        return <A />;

      case 'b':
        return <B />;

      default:
        return <C />;
    
  

做任何 JS 允许你做的事情:)

【讨论】:

谢谢,你是最棒的!【参考方案2】:

我会回答我理解的问题,我不确定是你真正的问题,但它就是这样。

首先将您的type 参数设置为您希望它代表的真实Class

import ChildComponent1 from './ChildComponent1.jsx';
import ChildComponent2 from './ChildComponent2.jsx';

class ParentComponent extends React.Component
  render()
     return(
        <ComponentSwitch type=ChildComponen1 name='John'/>  
        <ComponentSwitch type=ChildComponen2 name='Doe'/>
      )
  

然后从props 中提取type,并将props 的其余部分传递给子Component

class ComponentSwitch extends React.Component
    render()
      const 
        type: Component,
        ...props,
       = this.props;

      // props will now have 'name' and other props ready for the child component
      return <Component ...props />;
    

【讨论】:

以上是关于React:如何将不同类型的子组件动态附加到父组件中?的主要内容,如果未能解决你的问题,请参考以下文章

React Hooks - 如何将道具从子组件传递到父组件?

React (JSX) 中的子级到父级通信没有通量

将数据从子功能组件传递到父组件 - React/Typescript

我应该如何指定样式组件 React Native 组件的子类型?

如何从子组件 n Angular 将 FormGroup 对象作为输出发送到父组件

数据未从 Vue.js 中的子组件发送到父组件