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
相關文章
- Backbone React Requirejs 應用實戰(二)——使用Backbone ModelReactUIJS
- requirejs、backbone.js配置UIJS
- 搜車 React Native 依賴管理方案React Native
- 實現一個requirejs原型demoUIJS原型
- React的慢與快:優化React應用實戰React優化
- 搭建react專案常用依賴React
- requirejs 配製UIJS
- 快速理解RequireJsUIJS
- RequireJS入門指南UIJS
- React 原始碼中的依賴注入方法React原始碼依賴注入
- RequireJS shim 用法說明UIJS
- RequireJS原始碼分析(上)UIJS原始碼
- 已有外掛支援requirejsUIJS
- requireJS(版本是2.1.15)學習教程(一)UIJS
- AngularJS與RequireJS整合方案AngularJSUI
- 依賴管理利器---Spring IO Platform解決Spring組合依賴問題實戰SpringPlatform
- RequireJS中的require如何返回模組UIJS
- Part 2: Google's APIs 和 RequireJSGoAPIUIJS
- Util應用框架基礎(一) - 依賴注入框架依賴注入
- React實戰篇(React仿今日頭條)React
- React 開發實戰(一)- Repeat 元件React元件
- Maven最佳實踐:管理依賴Maven
- 如何從零入門React?實戰做個FM應用吧React
- React 應用實踐(基礎篇)React
- requirejs vue vue.router簡單框架UIJSVue框架
- vue、rollup、sass、requirejs組成的vueManagerVueUIJS
- RequireJS 模組化程式設計詳解UIJS程式設計
- RequireJs學習筆記之Define a ModuleUIJS筆記
- 開發一個React + Electron應用React
- React + Electron 搭建一個桌面應用React
- nestjs後端開發實戰(一)——依賴注入JS後端依賴注入
- golang 依賴管理Golang
- Maven依賴管理:控制依賴的傳遞Maven
- 從零開始搭建React應用(二)——React應用架構React應用架構
- 原生應用新增 Flutter 模組依賴Flutter
- 用React實現一個簡易的markdown部落格應用React
- React全家桶實戰-react版的cnode webappReactWebAPP
- React元件及應用React元件