我被react原生项目中的一个问题卡住了。我正在尝试做一个通用的请求文件,我在这里导出我的所有模块。在那之后,我只需要我的"require.js“文件,以避免在每个文件中像这样的调用(‘../../ModuleName’)。
我有4个文件:
index.ios.js
/app/home.js
/app/MyView.js
/app/require.js
require.js:
module.exports = {
Home: require('./home'),
MyView: require('./MyView')
}
在index.ios.js中( Home和MyView模块被正确导入)
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
} = React;
var {
Home,
MyView
} = require('./app/require');
class Test_require extends React.Component {
render() {
return(
<Home />
);
}
}
AppRegistry.registerComponent('Test_require', () => Test_require);
Home.js (模块MyView未导入)
'use strict';
var React = require('react-native');
var {
View,
Text
} = React;
var {
MyView
} = require('./require');
class Home extends React.Component {
render() {
console.log(MyView);
return(
<MyView />
);
}
}
module.exports = Home;
在Home.js中,MyView变量是“未定义的”。如果我想在一个Module中需要一个模块,这个模块已经被导入到另一个文件中,那么这个变量是未定义的。
你们知道为什么我可以这么做吗?或者我的问题有没有更好的解决方案?谢谢你的任何提示
发布于 2016-01-07 13:29:31
所以我发布了我自己的答案,以防其他人也有同样的问题。
在这样的语法中,所需的文件是同步加载的。因此,如果组件的构建速度比需要文件的速度快,就会出现这个问题。要么让组件在需要时延迟加载,要么像这样使用es6导入语法(异步导入加载):
import React from 'react-native'
干杯!
发布于 2016-05-27 04:03:42
在文件头注释中添加@providesModule moduleName
。你也可以在项目的其他地方使用require('moduleName')进行导入。
请参阅此issue。
顺便说一句,为什么这样一个令人惊叹的特性从来没有在任何地方被记录下来?
发布于 2020-01-15 20:30:27
这是很古老的,但记录需要更正。Require不是异步的。通过检查返回的对象(而不是promise),可以很容易地判断出这一点。
在ES6中重新导出非常简单。
例如:
export * from './types';
export { default as ApiClient } from './ApiClient';
https://stackoverflow.com/questions/33143147
复制相似问题