reactjs - 如何处理 TypeScript 中 Redux 的两个 configureStore 文件(多个 module.exports)?
问题描述
我正在为我的状态使用 Redux 构建一个带有 TypeScript 的 React Native 应用程序。
我喜欢将两个单独的文件用于configureStore
. 在 JS 这看起来像这样:
configureStore.dev.js
:
import { applyMiddleware, createStore } from "redux";
import logger from "redux-logger";
import reducers from "../reducers";
const configureStore = () => {
const store = createStore(reducers, applyMiddleware(logger));
return store;
};
export default configureStore;
configureStore.prod.js
:
import { createStore } from "redux";
import reducers from "../reducers";
const configureStore = () => {
const store = createStore(reducers);
return store;
};
export default configureStore;
configureStore.js
:
import Config from "react-native-config";
if (Config.REACT_ENVIRONMENT === "staging") {
module.exports = require("./configureStore.dev");
} else {
// tslint:disable-next-line no-var-requires
module.exports = require("./configureStore.prod");
}
然后在App.js
:
import React, { Component } from "react";
import Orientation from "react-native-orientation";
import { Provider } from "react-redux";
import Navigator from "./navigation/Navigator";
import configureStore from "./redux/store/configureStore";
export const store = configureStore();
export default class App extends Component {
componentDidMount = () => {
Orientation.lockToPortrait();
};
render() {
return (
<Provider store={store}>
<Navigator />;
</Provider>
);
}
}
现在 TypeScript 的问题是 - 在将这些文件转换为.ts
和之后.tsx
- 此代码会引发 linting 错误(并且它还会阻止所有 Jest 单元测试运行)。
modules.exports
根据环境变量导出相应文件的行会引发错误:
[tslint] require statement not part of an import statement (no-var-requires)
在throwsApp.tsx
的导入中:configureStore
[ts] Module '"/Users/jan/Documents/FullStackFounders/PainButton/painbutton/app/redux/store/configureStore"' has no default export.
在 TypeScript 中如何处理这种情况?
我能想出的唯一解决方案是只使用一个文件,并为所有 Dev only 配置使用大量 if。但这对我来说似乎并不干净。
解决方案
看来您正在混合import / export
和require / module.exports
语法。
尝试使用动态导入表达式。
configureStore.js
export default Config.REACT_ENVIRONMENT === "staging" ? import("./configureStore.dev") : import("./configureStore.prod");
主渲染文件
import configure from "./configureStore.js";
configure.then(configFunc => {
const store = configFunc();
ReactDOM.render(<App store={store} />, document.querySelector("#root"));
})
将store
作为道具传递给<App />
组件。
我希望它会有所帮助。
推荐阅读
- mongodb - Mongo服务器错误“无法建立连接,因为目标机器主动拒绝了它。”
- python-xarray - getting KeyError '.zmetadata' when opening remote zarr store
- r - How to use mapply to perform function on columns of two lists in R?
- python - 在 Python pandas 数据框中添加计数器作为附加列
- python - 将浮点数列表作为列添加到数据框时,我会丢失小数
- java - How can I set the radiobutton selection with my method btnCalcularOnClick()?
- codenameone - When videos are just loaded or paused, they are completely black (on Android)
- javascript - React-router-dom v6, URL changing but component doesn't render
- java - 如何根据用户的输入创建“自动”矩阵?
- json - How to show user profile photo in sharepoint view formatting?