I've added airbnb config for eslint that encourages prop and state destructuring, I like it, but stumbled across one problem when I define state in my component
class MyComponent extends Component {
state = {
animation: this.props.active ? 1 : 0
}
I get an error
[eslint] Must use destructuring props assignment (react/destructuring-assignment)
I'm not sure how can I correctly destructure active
out of props here?
Usually const {active} = this.props
works, but whenever I place it inside state or around it I get unexpected syntax error.
Destructuring is a simple property that is used to make code much clear and readable, mainly when we pass props in React.
Destructuring stateDestructuring states is similar to props. Here is syntax to Destructuring states in React: import React, { Component } from 'react' class StateDemp extends Component { render() { const {state1, state2, state3} = this.
Destructuring is a convenient way of creating new variables by extracting some values from data stored in objects or arrays. To name a few use cases, destructuring can be used to destructure function parameters or this. props in React projects for instance.
You can add this rule to .eslintrc.json
"rules": {
"react/destructuring-assignment": [
"error",
"always",
{
"ignoreClassFields": true
}
]
},
The only to keep it inside of the class property is to use a getter (which will be invoked at the first render):
state = {
get animation() {
const { active } = this.props;
return active ? 1 : 0;
}
}
Or you use an IIFE to initialize the property:
state = (() => {
const { active } = this.props;
return { animation: active ? 1 : 0 };
})()
But thats actually a bit overcomplicating. Another solution would be to move the property into the constructor:
constructor(...args) {
super(...args);
const { active } = this.props;
this.state = { animation: active ? 1 : 0 };
}
But I personally would just ignore that warning here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With