Size: a a a

2019 December 11

DG

Danil Gudz in Angular Kyiv
думаю мало кто делал, но скажу свое виденье:
// error-from-selector.ts
export class ErrorFromSelector extends Error {}

// selectors.ts
const mySelector = createSelector(store, (state) => {
if(__sluchilas_beda__) {
 throw new ErrorFromSelector("beda");
}
});


// error-handler.ts (https://angular.io/api/core/ErrorHandler)
class MyErrorHandler implements ErrorHandler {
 constructor(private store: Store){}

 handleError(error: Error) {
    if(error instanceof  ErrorFromSelector) {
       this.store.dispatch(new ErrorFromSelectorAction(error));
    }    
 }
}

// app.module.ts
@NgModule({
 providers: [{provide: ErrorHandler, useClass: MyErrorHandler}]
})
class AppModule {}
источник

DG

Danil Gudz in Angular Kyiv
если честно хз ангуляровский хендлер иксепшенов словит его с селектора или нет, но так по крайней мере красиво бы было
источник

СБ

Сергій Бабіч in Angular Kyiv
А є варіант валідувати дані при отриманні з АПІ, а не при комбінуванні даних в селекторі?
Бо це реально мухи з котлетами
источник

AS

Andrew Stepaniuk in Angular Kyiv
источник

DG

Danil Gudz in Angular Kyiv
для эффекта нужно экшн кинуть) и вопрос был как кинуть экшн
источник

AS

Andrew Stepaniuk in Angular Kyiv
))
источник

N

Nik in Angular Kyiv
Serhii
Доброго дня всем :)
Есть вопрос по ngrx.
Кратко: есть ли возможность использовать сервисы или отправлять action в store прямо из selector?
Вместе с контекстом:
Есть приложение, рисующее отчеты по студентам в виде виджетов. API построен таким образом, что просто оттдает дамп данных, а все необходимые метрики для каждого из виджетов считаются на UI стороне.
Был выбран вариант считать метрики внутри selectors.
Сейчас для некоторых ситуаций (базируясь на данных из API), хочется логировать ошибки в LoggerService.

Кто-нибудь что-то схожее делал?
Селекторы это же не калькуляторы, обрабатывайте данные в сервисах, используйте чистые функции, придумайте что то другое )
источник

СБ

Сергій Бабіч in Angular Kyiv
Nik
Селекторы это же не калькуляторы, обрабатывайте данные в сервисах, используйте чистые функции, придумайте что то другое )
а чому в селекторах не можна комбінувати дані?
источник

S

Serhii in Angular Kyiv
Ну, селекторы были выбраны потому что есть много кусков данных, которые считаются для многих виджетов. Мемоизация и все такое.)
источник

DG

Danil Gudz in Angular Kyiv
Nik
Селекторы это же не калькуляторы, обрабатывайте данные в сервисах, используйте чистые функции, придумайте что то другое )
А я где-то читал что они в этом плане крутые(юзать как калькуляторы) ибо мало того что это чистые функции так там ещё мемоизация под капотом
источник

S

Serhii in Angular Kyiv
И да, идея селекторов для комбинирования данных пришла после разговора с Alex Okrushko на Ng in depth конфе.
Тогда идея зашла.
источник

N

Nik in Angular Kyiv
Сергій Бабіч
а чому в селекторах не можна комбінувати дані?
комбинирование данных это да, а насчет калькуляций у меня были сомнения
источник

СБ

Сергій Бабіч in Angular Kyiv
так а чим калькуляції не комбінування даних?
источник

СБ

Сергій Бабіч in Angular Kyiv
селектори для цих цілей ідеально підходять, бо то таки функції і у тебе в компоненті не роїться стоголова гідра з підписок на стейт
источник

N

Nik in Angular Kyiv
в принципе да, если вычислений не много то вполней сойдет. если много то я бы вынес в отдельный слой. если совсем много то и в отдельный тред. в моем понимании сделать выборку (скомбинироваь данные) и выполнить просчеты - разные вещи
источник

N

Nik in Angular Kyiv
и если все просчеты будут в отдельном слое то не будет вопросов как файрить экшены из селекторов
источник

СБ

Сергій Бабіч in Angular Kyiv
штука така, що екшени з селектора кидати то взагалі троха єретично
источник

G

George in Angular Kyiv
Nik
в принципе да, если вычислений не много то вполней сойдет. если много то я бы вынес в отдельный слой. если совсем много то и в отдельный тред. в моем понимании сделать выборку (скомбинироваь данные) и выполнить просчеты - разные вещи
+1
мне кажется файрить ошибки из селекторов и потом ловить их и строить логику на этом такое себе.
источник

AS

Alex S in Angular Kyiv
Serhii
Доброго дня всем :)
Есть вопрос по ngrx.
Кратко: есть ли возможность использовать сервисы или отправлять action в store прямо из selector?
Вместе с контекстом:
Есть приложение, рисующее отчеты по студентам в виде виджетов. API построен таким образом, что просто оттдает дамп данных, а все необходимые метрики для каждого из виджетов считаются на UI стороне.
Был выбран вариант считать метрики внутри selectors.
Сейчас для некоторых ситуаций (базируясь на данных из API), хочется логировать ошибки в LoggerService.

Кто-нибудь что-то схожее делал?
почему бы не всунуть это дело в эффекты?
возвал запрос, обработал ответ и норм ответ записал в стор. Если чёт не то, то записал стейт ошибку..
а селекторы потом просто сделают свою работу

+ селекторы пересчитываются при обновлении стейта. Это нуно учесть в калькуляции
источник

СБ

Сергій Бабіч in Angular Kyiv
Alex S
почему бы не всунуть это дело в эффекты?
возвал запрос, обработал ответ и норм ответ записал в стор. Если чёт не то, то записал стейт ошибку..
а селекторы потом просто сделают свою работу

+ селекторы пересчитываются при обновлении стейта. Это нуно учесть в калькуляции
+1
источник