У меня есть библиотека компонентов Stencil, использующая @ Stencil / redux, redux, redux-observable и redux-actions. Раньше все работало нормально, но я пытаюсь перейти на Stencil @ One (1.0.0-beta.5).

У меня сейчас ошибка при создании магазина Redux. Это конфигурация моего магазина:

import { Store, createStore, applyMiddleware } from 'redux';
import { createEpicMiddleware } from 'redux-observable';
import { rootEpic } from './epic';

const epicMiddleware = createEpicMiddleware();
export const ogodStore: Store<OgodState> = createStore(rootReducer, applyMiddleware(epicMiddleware));

epicMiddleware.run(rootEpic);

Ошибка возникает при вызове applyMiddleware и является следующим:

TypeError: Class constructor Observable cannot be invoked without 'new'
    at new ActionsObservable (chunk-f18fe9c6.js:3744)
    at epicMiddleware (chunk-f18fe9c6.js:3830)
    at chunk-f18fe9c6.js:4579
    at Array.map (<anonymous>)
    at chunk-f18fe9c6.js:4578
    at createStore (chunk-f18fe9c6.js:4043)
    at chunk-f18fe9c6.js:4716

В течение многих лет меня так смущали разные типы и цели модулей javascript ... Но вот что я знаю:

  • Эта ошибка вызвана этим конкретным кодом внутри redux-observable:
(ActionsObservable.__proto__ || Object.getPrototypeOf(ActionsObservable)).call(this)
  • Он использует call(this) для создания объекта ActionsObservable, который зависит от класса Observable rxjs
  • В моей конфигурации Typescript я использую созданный трафарет, и он остается тем же для новых проектов (модуль: 'esnext', цель: 'es2017')

Observable из rxjs не поддерживает это ?! Это класс, который должен быть создан с использованием синтаксиса ES6 new, потому что он теперь поддерживается браузерами?

Я действительно хотел бы знать, должен ли я создать проблему в наблюдаемом в редуксе Github?

5
Elvynia 29 Май 2019 в 00:59

2 ответа

Лучший ответ

проблема была создана, так как никто не ответил. Надеюсь, мы скоро получим новости об этом ...

3
Elvynia 10 Июн 2019 в 13:07

Я решил эту проблему по ссылке на github, предоставленной @Elvynia -

Установите redux-observable-es6-compat и импортируйте -

import { createEpicMiddleware, combineEpics } from 'redux-observable-es6-compat';

Вместо

import { createEpicMiddleware, combineEpics } from 'redux-observable';
3
Mayeed 14 Июн 2019 в 19:23