149

I have an object contains multiple common key-value props, that I want to pass on to some jsx. Something like this:

const commonProps = {myProp1: 'prop1',myProp2: 'prop2'};
<MyJsx commonProps />

I want this to function as passing individual props:

<MyJsx myProp1={commonProps.myProp1} myProp2={commonProps.myProp2}/>

Is this possible?

Sabrina
  • 1,621
  • 2
  • 11
  • 16

6 Answers6

252

Is this possible?

Yes its possible, but the way you are sending it is not correct.

The meaning of <MyJsx commonProps /> is:

<MyJsx commonProps={true} />

So if you don't specify any value, by default it will take true. To pass the object, you need to write it like this:

const commonProps = {myProp1: 'prop1',myProp2: 'prop2'};
<MyJsx commonProps={commonProps} />

Update:

If you have an object and want to pass all the properties as separate prop, write it like this:

<MyJsx {...commonProps} />
Noam Yizraeli
  • 4,446
  • 18
  • 35
Mayank Shukla
  • 100,735
  • 18
  • 158
  • 142
77

You can use the spread operator to do this.

You can simply do <MyJsx {...commonProps} />

Now what all individual properties you have in commonProps will be sent as individual props to MyJsx.

Kaspar Lee
  • 5,446
  • 4
  • 31
  • 54
G_S
  • 7,068
  • 2
  • 21
  • 51
19

You need to use double braces, like this:

messages={{tile:'Message 1'}}

Or to pass many objects:

messages={[{title:'Message 1', name: 'Andrew'}, {title:'Message 2', name: 'Greg'}]}

It's simply JS syntax inside braces.

A final component might look like this

<Chat title="Some str" messages={[{title:'Message 1', name: 'Andrew'}, {title:'Message 2', name: 'Greg'}]} />
sharp
  • 857
  • 1
  • 9
  • 21
10

You can pass props as object in two ways:-

const commonProps = {myProp1: 'prop1',myProp2: 'prop2'};

1.Using spread Operator:-

<MyJsx {...commonProps} />

2.Simply pass that props:-

<MyJsx commonProps = {commonProps ? commonProps : true} />
sneha
  • 435
  • 4
  • 9
1

Can also do something like this:

<MyJsx objectProps={{
    prop1,
    prop2
}}/>

This way you don't have to write prop1: prop1 (if it is a variable or function such as state setState).

It can then be accessed in the component using destructuring: let { prop1, prop2 } = props.objectProps

timhc22
  • 7,213
  • 8
  • 48
  • 66
1
const object={name:'xyz',age:50}

use double braces as follows

<Message  {{object}}/>

Child

function Message({object}){  
    //You can get object here.//
}
Suraj Rao
  • 29,388
  • 11
  • 94
  • 103