Let's see pros/cons for each option, given the component User
:
const User = ({name,lastName}) => <>...</>
Destructing props:
const props = {
name: 'Jhon',
lastName: 'Cena'
};
<User {...props}/>
Pros
Cons
- Keys must match properties
- Error-prone, might get unexpected behavior when there are keys that supposedly aren't used by the component
- No auto-complete & auto-suggestion
const props = {
name: 'Jhon',
lastName: 'Cena',
id: 325013213
};
// User component might be updated in future releases and might use id unexpectedly.
<User {...props}/>
Passing named props
const props = {
user: 'Jhon',
lastName: 'Cena'
};
<User name={user} lastName={lastName}/>
Pros
- Auto-complete & auto-suggestion
- Values don't have to match the prop name (like
name={user}
)
- Maintainable
Cons
- Long syntax
- Not readable on many props
- Repeatable (
className={className}
)
Destructing named props
const props = {
name: 'Jhon',
lastName: 'Cena'
};
<User {...{ name,lastName }}/>
Props
- Auto-complete & auto-suggestion
- Maintainable
- Readable
Cons
On my codebase, I'm trying to combine:
const props = {
className: 'user',
user: 'Jhon',
lastName: 'Cena'
};
<User {...{className,lastName} name={user}/>
// Although you totally can write like this,
// I find it confusing
<User {...{className, name:user,lastName}/>