2015-10-15 94 views
4

我被困在反應原生項目中的問題上。我試圖做一個通用的需求文件,我出口所有的模塊。之後,我想只需要我的「require.js」文件來避免在每個文件中都需要這樣的調用('../../ ModuleName')。需要反應原生模塊

我有4個文件:

index.ios.js 
/app/home.js 
/app/MyView.js 
/app/require.js 

require.js:

在index.ios.js

(他模塊家庭和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沒有得到重要信息)

'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變量是「未定義的」。如果我想在模塊中需要一個模塊,該模塊已經導入到另一個文件中,則該變量是未定義的。

你們有什麼線索爲什麼我可以做到這一點,或者是否有更好的解決方案來解決我的問題?謝謝你的任何線索

回答

5

所以我張貼我自己的答案,以防其他人有同樣的問題。

在這樣的語法中,所需的文件正在同步加載。因此,如果組件的構建比需要文件快,則會發生此問題。要麼讓當你需要他們或(異步進口負載)使用ES6導入語法這樣你的組件加載懶:

import React from 'react-native' 

喝彩!

+0

所以,你的意思是'require'是同步的,'import'是異步的?這不是唯一的ES語法差異嗎? – Shaharyar

+0

這不是唯一的區別,但在我的情況下,這是我的問題的解決方案/原因。也許這個鏈接提供了更清晰的主題http://www.researchhubs.com/post/computing/javascript/nodejs-require-vs-es6-import-export.html – vanBrunneren

+0

我看到我的評論中的鏈接已損壞,所以如果有人正在尋找解決方案,請查看http://stackoverflow.com/questions/31354559/using-node-js-require-vs-es6-import-export – vanBrunneren

2

在您的文件頭註釋中添加@providesModule moduleName。你可以在你的項目中使用require('moduleName')其他地方導入。
看到這個issue
順便說一句,那麼這樣一個驚人的功能怎麼沒有記錄在任何地方?