Почему действия Redux реализованы как функции? - PullRequest
0 голосов
/ 29 апреля 2018

Я изучаю, как работает Redux, и я кое-что не могу до конца понять.

Обычно действия Redux реализованы как функции. Например:

const ACTION_INCREMENT = 'INCREMENT'
const increment = function(amount) {
   return {type: ACTION_INCREMENT, amount: amount}
}

store.dispatch(increment(2));

Почему действие не реализовано как классы? Я имею в виду, я нахожу более естественным что-то вроде этого:

class ActionIncrement {
    constructor(amount) {
      this.amount = amount;
    }
}

store.dispatch(new ActionIncrement(2));

Очень странно, что никто этого не делает. Есть ли проблема с этим подходом, которого я не видел?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Предлагаю прочитать Мотивационный раздел в документации.

Выполнение шагов Flux, CQRS и Event Sourcing, Redux пытается сделать состояние мутаций предсказуемым путем навязывания определенных ограничения на то, как и когда могут происходить обновления. Эти ограничения отражены в трех принципах Redux.

Вы можете создавать классы, так как они являются просто синтаксическим сахаром для создания объектов, однако какая польза от этого по сравнению с более явным литералом объекта?

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

0 голосов
/ 29 апреля 2018

Что вы имеете в виду создатели действий , которые являются функциями, которые возвращают действия (объекты JS).

Вот некоторые недостатки, о которых я могу подумать прямо сейчас:

  • Классы синтаксически более сложны, что приводит к более длинному шаблонному коду, большему пространству для неправильного использования / ошибок (например, забыв назначить свойство type для идентификаторов, которые нужно идентифицировать).

  • Создатели действий должны быть без гражданства. Использование классов может привести к большему злоупотреблению / недопониманию. Конечно, вы также можете использовать this для функций, но это менее распространено (и невозможно для функций, объявленных с синтаксисом стрелки ES6).

  • Он будет несовместим со многими существующими библиотеками Redux, такими как redux-thunk . redux-thunk задерживает отправку действия редукторам, что позволяет асинхронным вызовам создателей действий. Чтобы такие библиотеки поддерживали классы, все классы должны иметь общий асинхронный метод, который будет вызываться и ожидаться. Это приводит к увеличению количества шаблонов и возможности для неправильного использования / ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...