2016-11-14 1 views
0

У меня есть массив импортированных компонентов React с разными именами, и я бы хотел их перебрать и передать те же реквизиты для каждого из них, но я не могу найти способ сделать это правильно.Передача реквизитов в сопоставленную массив различных компонентов

Вот что я имею в виде псевдокода:

const myArray = [ 
    <Component1 />, 
    <Component2 />, 
    <Component3 />, 
]; 

render() { 
    return(
    <div> 
     {myArray.map(ComponentX => {ComponentX})} // pass the same props into these components? 
    </div> 
); 
} 
+0

Если я правильно понимаю, вы хотите передать новую опору каждому элементу массива? – madox2

ответ

3

Не используйте JSX внутри массива, и вы должны быть хорошо:

class Component1 extends React.Component { 
 
    render() { 
 
    return <div>{this.props.prop}</div>; 
 
    } 
 
} 
 

 
class Component2 extends React.Component { 
 
    render() { 
 
    return <div>{this.props.prop}</div>; 
 
    } 
 
} 
 

 
const myArray = [ 
 
    Component1, 
 
    Component2, 
 
]; 
 

 
class App extends React.Component { 
 
    render() { 
 
    return (
 
     <div> 
 
     {myArray.map(ComponentX => <ComponentX prop="Hello World!" />)} 
 
     </div> 
 
    ); 
 
    } 
 
} 
 

 

 
ReactDOM.render(<App/>, document.getElementById('View'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="View"></div>

+0

Отлично, это именно тот стиль, который я искал! По-видимому, нужно быть осторожным с именованием этого «ComponentX»: в фактическом компоненте, который я строил, компоненты были «Line1, Line2 и т. Д.». и я назвал отображаемый компонент LineX, который породил множество ошибок и список тегов ! Однако с «ComponentX» это сработало. –

0

Вы можете сделать это с React.cloneElement():

render() { 
    const myArray = [ 
     <Component1 />, 
     <Component2 />, 
     <Component3 />, 
    ]; 
    const extraProps = { 
     foo: 'bar' 
    }; 

    return (
     <div> 
      {myArray.map(comp => React.cloneElement(comp, extraProps))} 
     </div> 
    ); 
}