0

任何人都能够使用reduxredux-thunk构建应用程序吗?就我而言,它正在使用ionic serve但与npm run build. 我不能为设备构建,它只适用于浏览器。

我收到这些 ngc 错误

[19:25:46] ngc:错误:静态解析符号值时遇到错误。调用函数'createStore',不支持函数调用。考虑用对导出函数的引用替换函数或 lambda,解析 c:/Ionic/ionic-redux-test/.tmp/app/app.module.ts 中的符号 AppModule,解析 c:/Ionic/ionic 中的符号 AppModule -redux-test/.tmp/app/app.module.ts at simpleInContext (c:\Ionic\ionic-redux-test\node_modules\@angular\compiler-cli\src\static_reflector.js:469:23) 在 StaticReflector .simplify (c:\Ionic\ionic-redux-test\node_modules\@angular\compiler-cli\src\static_reflector.js:472:22) 在 StaticReflector.annotations (c:\Ionic\ionic-redux-test\node_modules \@angular\compiler-cli\src\static_reflector.js:61:36) 在 _loop_1 (c:

[19:25:46] ngc:编译失败

[19:25:46] ngc 失败:NGC 遇到错误 [19:25:46] 错误:NGC 在 ChildProcess 遇到错误。(c:\Ionic\ionic-redux-test\node_modules\@ionic\app-scripts\dist\ngc.js:62:24) 在 emitTwo (events.js:87:13) 在 ChildProcess.emit (events.js :172:7) 在 ChildProcess.cp.emit (c:\Ionic\ionic-redux-test\node_modules\cross-spawn\lib\enoent.js:40:29) 在可能关闭 (internal/child_process.js:821: 16) 在 Process.ChildProcess._handle.onexit (internal/child_process.js:211:5) Error running ionic app script "build": Error: NGC 遇到错误

这些是我在@NgModule之前对 app.module.ts 所做的修改

//Redux - ReduxThunk - rootReducer
import { createStore, applyMiddleware } from 'redux';
import ReduxThunk  from 'redux-thunk';
import { rootReducer } from '../modules/rootReducer';

const appStore = createStore(
    rootReducer,
    applyMiddleware(ReduxThunk)
);

并将其添加到 providers 数组中:

providers: [
    { provide: 'AppStore', useValue: appStore }
]

编辑:在app.module.ts中进行这些更改并将const appStore转换为export function之后。

export function appStore(): any {
  return createStore(
            rootReducer,
            applyMiddleware(ReduxThunk)
          );
};

我能够编译并运行该项目,但随后在 home.ts 中出现此错误

this.appStore.getState 不是函数类型错误:

this.appStore.getState 不是函数

这就是我在 home.ts 中所拥有的

export class HomePage {
    constructor(
        @Inject('AppStore') public appStore: any,
    ) { }

testRedux(){
    this.appStore.dispatch((dispatch)=> {
        dispatch({type: 'INCREMENT'});});
    console.log(this.appStore.getState().increment.counter);
    }
}

关于如何解决这个问题的任何想法?

4

1 回答 1

2

我能够通过app.module.ts中的以下更改来解决它

// const appStore = createStore(
//   rootReducer,
//   applyMiddleware(ReduxThunk)
// );

export function appStore(): any {
  return createStore(
            rootReducer,
            applyMiddleware(ReduxThunk)
          );
};

编辑:通过将提供程序数组中的useValue更改为useFactory。它将解决第二个问题。

  providers: [
    { provide: 'AppStore', useFactory: appStore }
  ]
于 2016-10-07T21:29:33.670 回答