2016-06-11 27 views
3

我只學反應。在一個星期,所以我是新來的,而且我想寫一個簡單的待辦事項應用程序。分裂反應的組分成多個文件

本來我寫的所有組件在一個文件並加載該文件到HTML文件和它的工作很大。現在我正在重構並嘗試將組件分割成不同的文件。

我完整的代碼是在我的Github上https://github.com/yasgreen93/todolist-reactextracting-files分支。

我已經分手了每個組件成不同的文件,並有一個鏈接他們的腳本標記到我的HTML。這是我的HTML文件看起來像:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Todo List</title> 
    <link rel="stylesheet" href="css/styles.css"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.1/react.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.1/react-dom.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.16/browser.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> 
    </head> 

    <body> 
    <div id="container"></div> 
    <script type="text/babel" src="scripts/components/TodoListApp.js"> </script> 
    <script type="text/babel" src="scripts/components/CompleteTodo.js"></script> 
    <script type="text/babel" src="scripts/components/TodoList.js"></script> 
    <script type="text/babel" src="scripts/components/SingleTodo.js"></script> 
    <script type="text/babel" src="scripts/components/AddTodo.js"></script> 
    <script type="text/babel" src="scripts/components/CompleteTodoButton.js"></script> 

    <script type="text/babel"> 
     ReactDOM.render(
     <TodoListApp url="/api/todos" updateUrl="/api/todos/update" pollInterval={2000}/>, 
     document.getElementById('container') 
    ); 
    </script> 
    </body> 
</html> 

在控制檯中,我總是得到錯誤信息Uncaught ReferenceError: TodoListApp is not defined。我試圖以不同的順序加載它們,但沒有成功。我也觀看了許多視頻,他們在沒有使用webpack的情況下采用非常類似的方法,並且適用於他們。我想在不使用webpack的情況下先開始工作,然後繼續學習。

任何人都可以看到,我錯了?

回答

2

您必須將組件添加到全局window變量中才能在html script標記中使用它們。像window.TodoListApp =...var聲明是相對於您聲明它的文件而言的。

但是,將部分代碼暴露給全局範圍並在瀏覽器中傳輸JSX被認爲是不好的做法。相反,你應該考慮使用一些建築系統,如Webpack

這種方式,您將能夠使用es2015 import syntax進口部件從一個文件到另一個,在一個文件中捆綁一切,很像縮小的代碼,sourcemaps,livereload等多個額外的好處

Setting up React for ES6 with Webpack and Babel

Using React with Webpack Tutorial

+0

謝謝您的建議。我沒有使用您提供的資源都使用的ES6。它仍然適用於ES5嗎? – yasgreen

+0

是的。只是不要使用babel loader並使用常規節點CommonJS模塊 - https://webpack.github.io/docs/commonjs.html –

+0

我同意作者的觀點。對於不太陡峭的曲線,必須可以在沒有webpack的情況下做到這一點。 –