使用此代码
const noCurrencies: Map<CurrencyCode, Currency> = new Map();
/**
* Reducer for the finished currency request.
*/
export function currencies(state: Map<CurrencyCode, Currency> = noCurrencies, action: Action): Map<CurrencyCode, Currency> {
switch (action.type) {
case SET_CURRENCIES:
return action.currencies;
default:
console.log('currencies(reducer): noCurrencies', noCurrencies)
return state;
}
}
我得到了这个控制台输出:
currencies(reducer): noCurrencies undefined
这是Babel的已知问题吗?我该如何调试?我感觉这是因为这个特定的文件在初始化期间被调用了两次,因此与另一个文件有一个循环依赖。
(我不是&#39;从头开始重新创建一个repro&#39;所以不要建议,并且类型为https://github.com/flowtype/flow-typed在预处理器步骤中被删除,我也试过没有类型,结果相同)
答案 0 :(得分:0)
原因是模块之间存在大的循环依赖关系。即使使用ECMAScript模块语法,编译器(WebPack 3 + babel)也不够智能,只能在需要时加载所需的内容;但是,只要在使用/触摸文件时评估所有导出和导入。
这意味着如果您有index.js
个文件可以自由地从它们周围导出内容,为其文件夹外的调用者创建一个入口点,您可能会遇到类似这样的问题。
我必须通过代码库并通过将导入直接导入索引文件的周围文件来使导入“深入”。
E.g。
import { create } from '../A'
变为import { create } from '../A/types'
index.js