このチュートリアルでは、Fluxアーキテクチャを使用してスケーラブルなReact Universalブログアプリの構築を示しています。 パート2では、コンテンツ管理とアプリケーションのスケーリングに焦点を当てています
データ管理のためのフラックスパターン:
フラックスパターン:routes.js
スマート対ダムコンポーネント:
routes.js
ストア:真実の単一のソース
フラックスroutes.js
は、アプリケーションデータの単一の真実源として機能します。 重要な原則には、次のものが含まれます
AppStore
// routes.js import React from 'react' import { Route, IndexRoute } from 'react-router' import AppStore from './stores/AppStore' import App from './components/App' import Blog from './components/Pages/Blog' import Default from './components/Pages/Default' import Work from './components/Pages/Work' import NoMatch from './components/Pages/NoMatch' export default ( <Route path="/" data={AppStore.data} component={App}> <IndexRoute component={Blog}/> <Route path="about" component={Default}/> <Route path="contact" component={Default}/> <Route path="work" component={Work}/> <Route path="/work/:slug" component={Work}/> <Route path="/blog/:slug" component={Blog}/> <Route path="*" component={NoMatch}/> </Route> )
uiはデータ駆動型です。データは店内に存在します。 UIの変更は、ストアデータの更新から発生します。
データは、小道具を介して高レベルから下位レベルのコンポーネントに一方向に流れます。
Store
コンポーネントは、データが高レベルから低レベルのコンポーネントにどのように流れるかを示しています。
AppStore.js
// AppStore.js import { EventEmitter } from 'events' import _ from 'lodash' export default _.extend({}, EventEmitter.prototype, { data: { ready: false, globals: {}, pages: [], item_num: 5 }, emitChange: function(){ this.emit('change') }, addChangeListener: function(callback){ this.on('change', callback) }, removeChangeListener: function(callback) { this.removeListener('change', callback) } })
、、などの他のコンポーネントの完全なコードは、簡潔にして省略されていますが、参照されたgithubリポジトリで入手できます。)
App.js
cosmic js構成とサーバー側のレンダリング
// App.js import React, { Component } from 'react' import AppDispatcher from '../dispatcher/AppDispatcher' import AppStore from '../stores/AppStore' import Nav from './Partials/Nav' import Footer from './Partials/Footer' import Loading from './Partials/Loading' export default class App extends Component { componentDidMount(){ AppStore.addChangeListener(this._onChange.bind(this)) } componentWillUnmount(){ AppStore.removeChangeListener(this._onChange.bind(this)) } _onChange(){ this.setState(AppStore) } getStore(){ AppDispatcher.dispatch({ action: 'get-app-store' }) } render(){ const data = AppStore.data if(!data.ready){ document.body.className = '' this.getStore() let style = { marginTop: 120 } return (<div className="container text-center" style={style}><Loading /></div>) } const Routes = React.cloneElement(this.props.children, { data: data }) return ( <div> <Nav data={data}/> {Routes} <Footer data={data}/> </div> ) } }
config.js
ファイルは、宇宙JS CMSに接続するために使用されます。 app-server.js
ファイルは、ReactDOMServer.renderToStaticMarkup
を使用してサーバー側のレンダリングを処理します。 package.json
スクリプトは、開発と生産のビルド用に構成されています。
結論
このチュートリアルは、堅牢でスケーラブルなReact Universalブログアプリを構築するための基盤を提供します。フラックスアーキテクチャとサーバー側のレンダリングを使用すると、パフォーマンス、SEO、および保守性が向上します。 完全なコードはGitHubで利用できます。 FAQセクションでは、フラックス、反応、およびユニバーサルアプリケーションに関する一般的な質問に対処しています。以上がReact Universalブログアプリの構築:フラックスの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。