I have a Loader component which works as expected with defaultProps:
const Loader = ({ inner, outer, ...rest }) => {
return (
<svg fill="none" viewBox="0 0 200 152" {...rest}>
<path
fill="none"
id={inner.id}
stroke={inner.color}
d="M99.217 100.606L58.302 29.74h81.829l-40.914 70.866z"
/>
<path
fill="none"
id={outer.id}
stroke={outer.color}
d="M100 151L13.398 1h173.205L100 151z"
/>
</svg>
);
};
Loader.defaultProps = {
id: 'loader',
inner: {
id: 'inner',
color: 'black'
},
outer: {
id: 'outer',
color: 'black'
}
};
ReactDOM.render(<Loader />, document.getElementById('root'));
<div id="root">
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
I want to migrate it to use Default Parameters while spreading a predefined defaultProps, but I can't figure it out:
const defaultProps = {
id: 'loader',
inner: {
id: 'inner',
color: 'black'
},
outer: {
id: 'outer',
color: 'black'
}
};
// Not working, runtime exception - `id is undefined`
const Loader = ({ inner, outer, ...rest } = defaultProps) => {
return ...
};
// works, but id is still undefined
const Loader = ({
inner = defaultProps.inner,
outer = defaultProps.outer,
...rest
}) => { return {...}; }
Sandbox with all examples above: