我创建了一个最小的React Native项目来演示这个问题: https://github.com/allenhsu/ReactNativeImportTest
尝试react-native run-ios
并查看控制台日志。
主要检查4个JS文件,index.ios.js
,common/TestView.js
,common/colors.js
和common/index.js
。
在common/index.js
中,我以多种方式重新导出了TestView和Colors。
在index.ios.js
中,我从common
模块导入了TestView。
在common/TestView.js
中,我从common
模块导入了颜色,也直接从common/colors.js
导入了颜色:
import {
Colors,
DefaultColors,
} from './';
import AnotherColors from './colors';
console.log('Colors out of component:');
console.log(Colors);
console.log(DefaultColors);
console.log(AnotherColors);
export default class TestView extends Component {
render() {
console.log('Colors in render:');
console.log(Colors);
console.log(DefaultColors);
console.log(AnotherColors);
return (
<View>
<Text>
I'm a test view.
</Text>
</View>
);
}
}
输出结果为:
Colors out of component:
TestView.js:17 undefined // Colors
TestView.js:18 Object {white: "#FFFFFF", black: "#000000"} // DefaultColors
TestView.js:19 Object {white: "#FFFFFF", black: "#000000"} // AnotherColors
TestView.js:23 Colors in render:
TestView.js:24 Object {white: "#FFFFFF", black: "#000000"} // Colors
TestView.js:25 Object {white: "#FFFFFF", black: "#000000"} // DefaultColors
TestView.js:26 Object {white: "#FFFFFF", black: "#000000"} // AnotherColors
我唯一的问题是,为什么第一个是undefined
?导入common/index.js
的导航首先导出,然后导出名称为Colors
。
如果我将TestView
的重新导出更改为:
export { default as TestView } from './TestView';
组件中的第二个DefaultColors
也将是未定义的。
更新
如果我在index.ios.js
中做同样的事情,那么所有三个变量都是在Component之外定义的。所以我认为它与common/index.js
和common/TestView.js
的循环导入有某种关联。