我更熟悉Angular,但所有的Single Page Applications
(SPA
)都基於相同的模型。你有三個層次:
- 的
Rails
MVC路由系統,其路線和控制器
- 的
React
SPA路由系統(也有自己的 路線和控制系統)
- 的
React
事件處理系統, ,作爲一個JavaScript框架,除其他外,在Web應用程序中捕獲鼠標點擊
在您的reactrails
示例頁面中,您的網站的根目錄(/
)由Rails
處理,並且每隔一頁(/*
)由react
路由系統攔截並處理。
所以基本上,如果你有一個導軌ApplicationController
你可以有一個config/routes.rb
這樣的:
# routes.rb
root 'application#main'
# catch every routes and serve only the Application.main action
match '*path', to: 'application#main'
# application_controller.rb
class ApplicationController
def main
end
end
這將每一個網址來Rails
(/this/is/an/example
,/that/one/is/not/an/example
......)重定向到React
路由器。 (請注意,你也可以有其他途徑,如/api/gimme/my/damn/json/data
,將解決其它控制器和發回JSON
,xml
,html
或任何類型的數據)
然後,在你的HTML頁面,React
攔截每點擊,鏈接上或按鈕,並將它們與自己的路線進行比較。
如果路徑匹配,它將通過其模板系統顯示正確的頁面(通常通過Ajax
加載它或從緩存中讀取它),並且不會看到任何頁面重新加載。你可以說react
行爲有一個客戶端服務器。
如果你把這種URL作爲/i/like/flowers
,該路線將首先通過rails
(/*
)處理,即會向您發送html
文件位於/
路線,包含你的SPA
的應用程序,這將踢,分析路由本身,並從您自己的模板系統向您展示正確的內容。
所以總結一下,您有:
GET /my/super/react/url
//=> Rails serves `main.html` that includes `react-router`
一旦main.html
被加載,react-router
着眼於它的路線組件和服務的權利模板,如果路由存在(/my/super/react/url
)。
你可以找到在react-router documentation
這是基本的情況,而且我相信其他人會完成什麼我沒有涵蓋更多的例子,並添加react
特定的樣本!
謝謝你的回答。很好地解釋;) –