Есть ли недостатки в использовании классов для создания избыточного хранилища? - PullRequest
1 голос
/ 14 февраля 2020

Один из наших разработчиков предположил, что предпочтительнее не использовать классы для создания избыточного хранилища, но не назвал конкретную причину, в основном говоря: «это не идиоматизм c, а классы не очень хорошо реализованы в ES6; предпочтительно избегать использования классов в React ".

Есть ли какие-либо проблемы (даже если это на самом деле не является отраслевым стандартом?) для создания хранилища с избыточностью таким способом?

class Item {
  public name: string;
}

class ItemState {
  public items: Item[];
  public currentItem: Item;
}

// redux store
class AppState {
  public Items = new ItemState();
}

// then createStore(/*reducer*/, new AppState())

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Одна вещь, которая приходит на ум, это сериализация. Если вы хотите поддерживать такие вещи, как гидратация и отладка во времени, вы должны иметь возможность сериализовать свой магазин и восстановить его.

Ваш пример класса не использует никаких методов или наследования, поэтому, возможно, это не проблема для вас. Но если вы планируете добавить этот материал, имейте в виду, что вы, возможно, отсекаете себя от функций, которые я упомянул.

См. Также этот раздел документации по избыточности

0 голосов
/ 14 февраля 2020

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

function mapStateToProps(state)
{
   return {currentItemName: state.Items.currentItem.name};
}

Это кажется мне слишком длинным. Даже если вы передаете state.Items непосредственно вашему компоненту, в какой-то момент вам понадобится получить доступ к имени currentItem и написать полное имя. Я думаю, что выбор в основном зависит от конкретных аспектов приложения. Но, как я уже сказал, мой опыт ограничен, и я создал свои редукционные магазины, используя классы.

...