我在反应原生项目中遇到问题。我正在尝试执行一般要求文件,我导出所有模块。之后,我想只需要我的“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正确地获取了importet)
'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没有获取importet)
'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变量是“未定义的”。如果我想要一个模块中的模块,它已经被导入另一个文件,那么该变量是未定义的。
你们有什么线索为什么我能做到这一点还是有更好的解决方案来解决我的问题?谢谢你的任何线索
答案 0 :(得分:5)
所以我发布了自己的答案,以防其他人遇到同样的问题。
在这样的语法中,所需的文件将同步加载。因此,如果组件的构建比要求文件更快,则会出现此问题。要么在需要时使组件加载延迟,要么像这样使用es6导入语法(异步导入加载):
import React from 'react-native'
喝彩!
答案 1 :(得分:2)
在文件标题评论中添加.run(function($ionicPlatform, $ionicPopup, TranslationsService) {
$ionicPlatform.onHardwareBackButton(function () {
if(true) {
$scope.translations = TranslationsService.getData();
$ionicPopup.confirm({
title: 'System warning',
scope: $scope,
template: 'MESSAGE HERE {{translations.logout}}'
}).then(function(res){
if( res ){
navigator.app.exitApp();
}
})
}
})
})
。您可以使用项目中的require(&#39; moduleName&#39;)其他位置导入
见issue
顺便说一下,为什么这样一个令人惊奇的功能从未在任何地方记录过?
答案 2 :(得分:0)
这很老了,但是记录需要更正。需求不是异步的。您可以通过检查返回的对象(不是承诺)来轻松地分辨出这一点。
在ES6中重新导出很简单。
例如:
export * from './types';
export { default as ApiClient } from './ApiClient';