Backbone React Requirejs 應用實戰(一)——RequireJS管理React依賴
試著用React替換Mustache打造了一個簡單的頁面,http://backbone-react.phodal.com/,當然Router用的還是Backbone的Router(react-router似乎還沒有做準備好做client-side的Router)。
Backbone RequireJS React 組合
組合的情況以及開發環境如下
- IDE: Webstorm(開源license,支援JSX)
- Backbone: Router + Model
- React: react-with-addons
- JSXTransformer
- react.backbone
其他
- loadsh替換underscore
- zepto替換jquery
- RequireJS jsx外掛
RequireJS管理React依賴
JSX Requirejs
github上有一個外掛是: jsx-requirejs-plugin
A RequireJS plugin for JavaScript files containing JSX. It's r.js friendly (i.e. all files containing JSX will be pre-compiled during the r.js build).
於是,安裝jsx-requirejs-plugin
bower install jsx-requirejs-plugin --save-dev
Requirejs JSX使用
1.新增paths
react: 'vendor/react-with-addons.min',
"JSXTransformer": 'vendor/JSXTransformer',
jsx: 'vendor/jsx',
'react.backbone': 'vendor/react.backbone',
2.使用jsx!
require(['jsx!app.react'], function (App) {
});
最後我的main.js如下所示:
'use strict';
require.config({
paths: {
jquery: 'vendor/jquery.min',
react: 'vendor/react-with-addons.min',
"JSXTransformer": 'vendor/JSXTransformer',
jsx: 'vendor/jsx',
'react.backbone': 'vendor/react.backbone',
backbone: 'vendor/backbone',
underscore: "vendor/lodash.min",
text: 'vendor/text'
},
shim: {
underscore: {
exports: '_'
}
}
});
require([
'backbone', 'jsx!app.react'
], function (Backbone, App) {
App.initialize();
});
換句話說,我們將app.react.js視作app.react.jsx(這裡的.react是為了區分js和jsx)。
下面是我的router.react.js
define([
'jsx!router.react'
], function (Router) {
var initialize = function () {
new Router();
};
return {
initialize: initialize
};
});
在我們的router裡匯入了不同的component,下面是一個精簡的router
'use strict';
define([
'underscore',
'backbone',
'react',
'jsx!component/IndexComponent.react',
],function(_, Backbone, React, IndexComponent){
var AppRouter = Backbone.Router.extend({
index: function(){
React.render( <IndexComponent />, document.getElementById('main_content'));
}
initialize: function() {
var self = this,
routes = [
[ /^.*$/, 'index' ]
];
_.each(routes, function(route) {
self.route.apply(self, route);
});
Backbone.history.start();
}
});
return AppRouter;
});
到此,我們可以愉快地用Requirejs管理我們的component。
其他
完整的Router
我的router如下所示:
define([
'underscore',
'backbone',
'react',
'jsx!component/IndexComponent.react',
'jsx!component/AboutComponent.react',
'jsx!component/ProductComponent.react',
'jsx!component/ProjectComponent.react',
'jsx!component/LibraryComponent.react',
'model/UserModel',
'data/libraries'
],function(_, Backbone, React, IndexComponent, AboutComponent, ProductComponent, ProjectComponent, LibraryComponent, UserModel, libraries){
var AppRouter = Backbone.Router.extend({
index: function(){
React.render( <IndexComponent />, document.getElementById('main_content'));
},
about: function(){
React.render( <AboutComponent />, document.getElementById('main_content'));
},
product: function(){
React.render( <ProductComponent />, document.getElementById('main_content'));
},
library: function(){
React.render( <LibraryComponent items={libraries} />, document.getElementById('main_content'));
},
project: function(){
var user = new UserModel({name: 'phodal'});
var UserView = React.createFactory(ProjectComponent);
var userView = new UserView({model: user});
React.render(userView, document.getElementById('main_content'));
},
initialize: function() {
var self = this,
routes = [
[ /^.*$/, 'index' ],
[ 'about', 'about' ],
[ 'product', 'product' ],
[ 'project', 'project' ],
[ 'library', 'library' ]
];
_.each(routes, function(route) {
self.route.apply(self, route);
});
Backbone.history.start();
}
});
return AppRouter;
});
問題
JSXTransformer
壓縮後的大小>100kb
相關文章
- 搜車 React Native 依賴管理方案React Native
- requirejs vue vue.router簡單框架UIJSVue框架
- 搭建react專案常用依賴React
- 基於requirejs的vue2專案 (三)UIJSVue
- React 原始碼中的依賴注入方法React原始碼依賴注入
- 用例依賴管理
- 依賴管理利器---Spring IO Platform解決Spring組合依賴問題實戰SpringPlatform
- 依賴管理和依賴範圍
- Util應用框架基礎(一) - 依賴注入框架依賴注入
- React實戰篇(React仿今日頭條)React
- nestjs後端開發實戰(一)——依賴注入JS後端依賴注入
- 如何從零入門React?實戰做個FM應用吧React
- 開發一個React + Electron應用React
- React Native搭建開發環境/link原生依賴問題React Native開發環境
- 從零開始搭建React應用(二)——React應用架構React應用架構
- 用React實現一個簡易的markdown部落格應用React
- Maven依賴管理Maven
- Maven 依賴管理Maven
- - Maven 依賴管理Maven
- React元件及應用React元件
- Maven依賴管理:控制依賴的傳遞Maven
- react + express 擼一個圖床應用ReactExpress圖床
- React實戰之React+Redux實現一個天氣預報小專案ReactRedux
- React實戰入門指南React
- React hooks實戰總結ReactHook
- react-native 開發前的見面禮 — 誤入依賴坑React
- PHP依賴管理ComposerPHP
- govendor依賴包管理Go
- Angular 應用級別的依賴 FakeAngular
- 原生應用新增 Flutter 模組依賴Flutter
- React Hooks 實用指南ReactHook
- 分享一個 SPA 應用(React)的 SEO 方案React
- 探索 JavaScript 中的依賴管理及迴圈依賴JavaScript
- 讓react用起來更得心應手——(react-redux)ReactRedux
- 掘金 AMA:聽《React 狀態管理和同構實戰》作者--LucasHC 說 React 和前端那些事React前端
- Istio 運維實戰系列(1):應用容器對 Envoy Sidecar 的啟動依賴問題運維IDE
- React.js 實戰 - 元件 & PropsReactJS元件
- React單元測試實戰React
- 手把手教你React Native實戰從 React到Rn《二》React Native