Flux Utils TypeError:如果没有“ new”,则无法调用类构造函数App

Adr*_*scu 5 flux typescript reactjs reactjs-flux

我正在尝试在以下React组件上实现Flux Util容器:

class App extends React.Component<{},AppState> {
 constructor(props:Readonly<{}>){
    super(props);   
 }
 static getStores(){
    return [ArticlesStore];
 }

 static calculateState(prevState:AppState):AppState{
    return {
        articles:ArticlesStore.getState()
    }
 }
 render() {
    return (
        <main>
            <Navbar></Navbar>
            <Routes></Routes>
        </main>
    );
 }
}


interface AppState{
 /**
  * Articles retrived from the ArticlesState to be used in the rendering of the page
  */
 articles:ArticlesStoreState;
}

export default Container.create(App);
Run Code Online (Sandbox Code Playgroud)

在实现创建容器所需的代码时,我遵循了flux网站上提供的示例以及在GitHub上找到的其他一些代码作为参考。但是在运行此代码时,出现以下错误:

`TypeError: Class constructor App cannot be invoked without 'new'.` 
Run Code Online (Sandbox Code Playgroud)

(我正在使用打字稿)

有谁知道导致此错误的原因是什么?提前致谢!

Ros*_*ese 0

我遇到了同样的问题,这可能发生在你身上,因为你正尝试像我一样在 ES6 中运行 Flux。

如果是这样的话,那么根据GitHub 存储库中的这个问题,Flux Containers 仍然不支持 ES6。

如评论中所示,可能的(丑陋的)解决方法是执行以下操作:

/// FluxContainerConverter.js

module.exports = {
    convert: function(containerClass) {
        const tmp = containerClass;
        containerClass = function(...args) {
            return new tmp(...args);
        };
        containerClass.prototype = tmp.prototype;
        containerClass.getStores = tmp.getStores;
        containerClass.calculateState = tmp.calculateState;
        return containerClass;
    }
};
Run Code Online (Sandbox Code Playgroud)

现在您可以使用它来创建 FluxContainer,如下所示:

var fluxContainerConverter = require('./FluxContainerConverter');

Container.create(
    fluxContainerConverter.convert(MyComponent));
Run Code Online (Sandbox Code Playgroud)