序言
我正在使用create-react-app
来生成应用程序。
问题
TodoList === undefined
代码
components / index.js
export { default as App } from './App/App.js';
export { default as TodoList } from './TodoList/TodoList.js';
containers / index.js
export { default as VisibleTodoList } from './VisibleTodoList.js';
components / App / App.js
import { VisibleTodoList } from '../../containers/index.js';
containers / VisibleTodoList.js
import { TodoList } from '../components/index.js';
components / TodoList / TodoList.js
export default function TodoList({ todos, onTodoClick }) { ... }
TodoList现在为undefined
。我认为这可能与我有某种循环问题有关。
问题是,如果我使用以下方法导入 containers / VisibleTodoList.js ,一切正常。
import TodoList from '../components/TodoList/TodoList.js';
如果我尝试使用“中间人”(components / index.js文件)进行导入,那么有什么特殊之处会破坏导入。
完整代码
我已经创建了一个CodeSandbox,其中包含我的完整代码,就像我的应用程序中一样。该应用程序非常简单,但比我在这里概述的要复杂。
答案 0 :(得分:1)
此问题是由您的components/index.js
文件中的 exports 的顺序引起的。
export { default as App } from './App/App.js';
export { default as TodoList } from './TodoList/TodoList.js';
由于App.js
导入了VisibleTodoList
,需要导入TodoList
并将其传递给redux connect
函数才能导出自身,所以最终会发生冲突。
我不确定这是否是babel的实现怪癖,或者这是从ES导入规范的定义得出的逻辑结果。
在任何情况下,更改导出顺序都可以修复该错误。
export { default as TodoList } from './TodoList/TodoList.js';
export { default as App } from './App/App.js';
根据经验,如果您无法重构文件以避免导入循环,则应将外层组件放在列表的最后,因为它可能依赖于列表中较高的导入。
此处提供完整的工作代码和框:https://codesandbox.io/s/74mlwnwyy1