2016-07-06 157 views
11

我正在嘗試在React JS中使用DRY。我試圖使用相同的HTML部分在不同的文件ReactJS:未捕獲ReferenceError:需求未定義

部分:

var AdminMenu = React.createClass({ 
getInitialState: function() { 
    return {}; 
}, 
render: function() { 
    return (
    <h1>Menu</h1> 
    ); 
} 
}); 

我requeiring它在另一個文件:

require('./scripts/adminMenu.js'); 

ReactDOM.render(
<AdminMenu/>, 
document.getElementById('content') 
); 

但我發現了一個錯誤:

Uncaught ReferenceError: require is not defined 

此腳本包含HTML頁面上一樣: <script type="text/babel" src="scripts/admin.js"></script>

我使用的WebPack

+0

哪個打包/建設者您使用的? – webdeb

+0

@webdeb webpack –

+0

你的代碼看起來有問題,你需要adminMenu,但你不要指定它..你爲什麼不使用ES導入/導出?您是否檢查過webpack.config.js以獲取React最佳實踐? – webdeb

回答

4

如果你沒有使用任何模塊捆綁喜歡的WebPack或等 你應該分配給你的組件一些JavaScript全球對象,因爲從.jsx對象不放在全球範圍內

因此,這裏的解決方案(使用窗口對象這裏)

定義模塊:

window.AdminMenu = React.createClass({ 
    getInitialState: function() { 
    return {}; 
    }, 
    render: function() { 
    return (
     <h1>Menu</h1> 
    ); 
    } 
}); 

當你使用它:

ReactDOM.render(
    <window.AdminMenu/>, 
    document.getElementById('content') 
); 
+1

你說:**「如果你不使用任何模塊捆綁軟件如webpack或其他」**。在 中**「etc」**是否包含**「grunt」**我正在使用grunt捆綁我的js。我仍然收到這個錯誤。 –

2

考慮使用ES6模塊而不需要與之反應

出口模塊:

// src/hello.js 
// export as default 
export default const hello = ({name}) => (
    <h1>Hello {name}</h1> 
) 

導入模塊:

// src/index.js 
// import from relative directory (src) 
import Hello from './hello' 

const App =() => { 
    return (
    <div> 
     <Hello name="Pavel" /> 
    </div> 
) 
} 
+0

在'const'上得到了錯誤:browser.js:2027未捕獲的SyntaxError:意外的標記(1:15)' –

+1

沒有'const'出現錯誤: 'VM1842:4 Uncaught ReferenceError:exports is not defined' –

+0

當然,因爲它沒有複製粘貼代碼,所以你應該設置webpack以支持es6 – webdeb

2

您應該閱讀關於模塊的更多信息,例如:https://www.sitepoint.com/understanding-es6-modules/

在現有代碼的主要問題是:

  1. 看起來,儘管所使用的WebPack,你用它走錯了路。在你的最終包(最終的JS文件)中,它不應該包含任何'require'關鍵字。你的webpack使用了Babel嗎?請向我們展示您的WebPack配置。
  2. 您的AdminMenu文件看起來不像模塊。您的adminMenu文件應該包含'export'關鍵字,之後您可以從其他文件'需要'或'導入'它。

此外,你可以寫在與俄羅斯的意見的問題,如果它是更方便您

相關問題