Pass react component as props

后端 未结 2 967
忘掉有多难
忘掉有多难 2020-11-29 03:36

Lets say I have:

import Statement from \'./Statement\';
import SchoolDetails from \'./SchoolDetails\';
import AuthorizedStaff from \'./AuthorizedStaff\';

co         


        
相关标签:
2条回答
  • 2020-11-29 04:21

    As noted in the accepted answer - you can use the special { props.children } property. However - you can just pass a component as a prop as the title requests. I think this is cleaner sometimes as you might want to pass several components and have them render in different places. Here's the react docs with an example of how to do it:

    https://reactjs.org/docs/composition-vs-inheritance.html

    Make sure you are actually passing a component or not an object (this tripped me up initially).

    The code is simply this:

    const Parent = () => { 
      return (
        <Child  componentToPassDown={<SomeComp />}  />
      )
    }
    
    const Child = ({ componentToPassDown }) => { 
      return (
        <>
         {componentToPassDown}  
        </>
      )
    }
    
    0 讨论(0)
  • 2020-11-29 04:22

    Using this.props.children is the idiomatic way to pass instantiated components to a react component

    const Label = props => <span>{props.children}</span>
    const Tab = props => <div>{props.children}</div>
    const Page = () => <Tab><Label>Foo</Label></Tab>
    

    When you pass a component as a parameter directly, you pass it uninstantiated and instantiate it by retrieving it from the props. This is an idiomatic way of passing down component classes which will then be instantiated by the components down the tree (e.g. if a component uses custom styles on a tag, but it wants to let the consumer choose whether that tag is a div or span):

    const Label = props => <span>{props.children}</span>
    const Button = props => {
        const Inner = props.inner; // Note: variable name _must_ start with a capital letter 
        return <button><Inner>Foo</Inner></button>
    }
    const Page = () => <Button inner={Label}/>
    

    If what you want to do is to pass a children-like parameter as a prop, you can do that:

    const Label = props => <span>{props.content}</span>
    const Tab = props => <div>{props.content}</div>
    const Page = () => <Tab content={<Label content='Foo' />} />
    

    After all, properties in React are just regular JavaScript object properties and can hold any value - be it a string, function or a complex object.

    0 讨论(0)
提交回复
热议问题