Есть ли существенная разница в синтаксисе определения состояния в React Component?

Есть ли какая-либо разница (кроме синтаксиса) в определении state в компоненте React (см. Примеры ниже, в классе и в конструкторе)?

Разница в распределении памяти JS, управлении памятью, производительности JS, утечках памяти, сборке мусора и других проблемах?

Я обычно определяю state в constructor. Но просматривая код других парней, я видел, что они определяют состояние в области видимости класса.

class Button extends React.Component {
    // this style vs. ...
    state = {
        color: 'red'
    }

    constructor(props) {
        super(props)

        // ... vs. this style
        this.state = {
            color: 'red'
        }
    }
}

Это просто синтаксический сахар, оба дадут вам один и тот же объект подчеркивания.

Keith 28.07.2018 10:12

Синтаксический сахар @Keith - это скрытый фрагмент кода, который выполняет некоторую операцию, чтобы сделать синтаксический сахар возможным. Это может быть более или менее затратная операция.

Green 28.07.2018 10:16

Нет, это точно так же, синтаксический сахар - это просто так. Объявления области видимости класса еще даже не являются стандартными. Так что прироста производительности не будет.

Keith 28.07.2018 10:18

пс. ты тоже имел ввиду -> state = { color: 'red' }github.com/tc39/proposal-class-fields

Keith 28.07.2018 10:26

@Keith Ага, конечно. Синтаксическая ошибка

Green 28.07.2018 10:30

Это на этапе 3, поэтому некоторые браузеры могут вскоре внедрить его. Так что, возможно, вы могли бы воскресить эту ветку в будущем .. :) Я чувствую, что даже когда браузеры реализованы изначально, я сомневаюсь, что между ними будет большая разница в производительности.

Keith 28.07.2018 10:36
Поведение ключевого слова "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) для оценки ваших знаний,...
2
6
47
2

Ответы 2

это тоже своего рода синтаксис PREACT ...

Инициализация свойств экземпляра вне конструктора - это предлагаемый синтаксис для следующей версии EcmaScript. Это часть официальное предложение этапа 3.

Согласно этому предложению следующий фрагмент:

class MyClass {
    constructor() {
        console.info("Hello from constructor!");
        this.x = 1;
    }
}

Может быть сокращено до:

class MyClass {
    x = 1;

    constructor() {
        console.info("Hello from constructor!");
    }
}

Если свойство x объявлено и инициализировано с тем же синтаксисом, что и свойство state в вашем примере.

ES7 не существует. В настоящее время он называется ES.Next.

Estus Flask 28.07.2018 15:18

@estus Удалена ссылка на номер версии.

cyco130 29.07.2018 13:08

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