Деструктуризация пропов внутри реактивного состояния

Я добавил конфигурацию airbnb для eslint, которая поощряет деструктуризацию свойств и состояний, мне это нравится, но я наткнулся на одну проблему, когда определяю состояние в своем компоненте.

class MyComponent extends Component {
  state = {
    animation: this.props.active ? 1 : 0
  }

Я получаю ошибку

[eslint] Must use destructuring props assignment (react/destructuring-assignment)

Я не уверен, как мне здесь правильно разрушить active из пропсов? Обычно const {active} = this.props работает, но всякий раз, когда я помещаю его в состояние или около него, я получаю неожиданную синтаксическую ошибку.

вам нужно переместить его в конструктор ... или вы просто проигнорируете предупреждение

Jonas Wilms 07.07.2018 12:59

@JonasW. gotcha, ну, если я проигнорирую это, он проигнорирует его везде, или у меня будет много комментариев по отключению eslint: / идея, можно ли как-то отключить глобально для state = {pattern?

Ilja 07.07.2018 13:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
13
2
9 707
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Единственное, что можно сохранить внутри свойства класса, - это использовать геттер (который будет вызываться при первом рендеринге):

state = {
  get animation() {
    const { active } = this.props;
    return active ? 1 : 0;
  }
}

Или вы используете IIFE для инициализации свойства:

state = (() => {
  const { active } = this.props;
  return { animation: active ? 1 : 0 };

})()

Но на самом деле это немного сложно. Другое решение - переместить свойство в конструктор:

constructor(...args) {
 super(...args);

 const { active } = this.props;
 this.state = { animation: active ? 1 : 0 };

}

Но лично я бы просто проигнорировал это предупреждение здесь.

В блоке кода IIFE есть дополнительная скобка. ;)

Ignatius 18.03.2019 08:48

Что означает ... args (тройные точки перед аргументами)?

FMaz008 12.12.2020 20:26

@ FMaz008, это аргумент остаточный параметр или спред

Jonas Wilms 12.12.2020 21:06

Вы можете добавить это правило в .eslintrc.json

"rules": {
    "react/destructuring-assignment": [
      "error",
      "always",
      {
        "ignoreClassFields": true
      }
    ]
  },

Другие вопросы по теме