Pull to refresh
9
0
Виктор Николаев @Veikedo

.net developer

Send message

В том, что дублирования много — надо объявить тип, надо указать тип в actionCreator'e, а при использовании redux-thunk в dispatch вообще нетипизированный экшен отправить легко. В reducers вообще тяжко типизировать.


Сейчас сделал так — actions это объект класса (назвал их messages). Поле type у message это имя класса.
Затем в редьюсере с помощью декоратора handler выдираю типы message и нахожу обработчик


// messages aka actions
export class Message {
    type = this.constructor.name;
}

export class FetchOffenseSegments extends Message {
    constructor(public payload: NIBRSOffenseSegment[]) {
        super();
    }
}

// action creators
export const fetchSegments = () =>
    api.getOffenseSegments()
        .then(segments => new FetchOffenseSegments(segments));

// reducers
class SegmentHandlers implements MessageReducer<NIBRSOffenseSegment[]> {
    state: NIBRSOffenseSegment[] = [];

    @handler handleFetchOffenseSegments(message: FetchOffenseSegments) {
        return message.payload;
    }

    @handler handleRemoveOffenseSegment(message: RemoveOffenseSegment) {
        return this.state.filter(x => x.id !== message.payload);
    }

    @handler handleImportCaseIncidents(message: ImportCaseIncidents) {
        return [...this.state, ...message.payload];
    }
}

export default combineReducers({
    segments: asReducer(SegmentHandlers),
    caseIncidents: asReducer(CaseIncidentHandlers)
});
  1. Нет, не все. Как раз redux это и автоматизирует
  2. Это скорее ООП головного мозга. Нет, я не в обиду — я сам люблю и практикую C#. Но тут другой подход и он хорошо работает.
    А если смотреть ещё глубже, то тут наоборот хорошее разделение — аналоги message bus & event sourcing в мире бэкенда.
  3. Тут да, есть гемор

Используете ли вы redux?
Если используете, то как вы типизируете ваши actions?
Мы используем подобие такого, но не очень удобно https://rjzaworski.com/2016/08/getting-started-with-redux-and-typescript#actions

Неправильная привычка у вас :)
Props это как входные параметры функции -> идут первыми.
Компонент это возвращаемый результат -> идёт последним

ctrl+shift+backspace туда же

Посмотрите Normal Tanks

Вот каждый раз такой комент в статье про флексбокс.
Ну откройте вы http://caniuse.com/ и посмотрите, тем более что в минусах автор уже написал про ie.

а может ещё и компоненты реакта к нему подключить можно?
Экосистема реакта гораздо обширнее

+ Есть подозрение, что такое должно решаться ui тестами.

У меня одного всё нормально работает?

Про облачное решение было бы интересно почитать.
Как построено, как справляетесь с нагрузкой, какие инструменты/технологии используете.
Также было бы интересно какой объём кода и насколько большие команды и как, грубо говоря, боретесь со сложностью разработки.

Ребят, а вы писали где-нибудь про то, как архитектурно у вас сделано всё?

А может видео записали?

Пакет reflect-metadata уже идёт с .d.ts, так что отдельно тайпинги ставить не надо.

Извиняюсь, отсутствие соц пакета — это вообще без отпуска?
Что с праздниками?

Тут, кстати, можно ещё какой-нибудь АОП прикрутить, дописывающий установку состояний и новый фреймворк готов :)

Тут можно накостылить атрибуты на методы, открывающие диалог, добавить.


[OpenWhenResurectedIf("choosingPaymentCard")]
public void ShowChoosePaymentCardDialog() 
{
    this.State["choosingPaymentCard"] = true;
    // opening dialog, handle closing and then
    this.State["choosingPaymentCard"] = false;
}

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity