ホームページ >ウェブフロントエンド >jsチュートリアル >React Universalブログアプリの構築:フラックスの実装
このチュートリアルでは、Fluxアーキテクチャを使用してスケーラブルなReact Universalブログアプリの構築を示しています。 パート2では、コンテンツ管理とアプリケーションのスケーリングに焦点を当てています
データ管理のためのフラックスパターン:
フラックスパターン:routes.js
スマート対ダムコンポーネント:
routes.js
ストア:真実の単一のソース
フラックスroutes.js
は、アプリケーションデータの単一の真実源として機能します。 重要な原則には、次のものが含まれます
AppStore
<code class="language-javascript">// 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> )</route></route></route></route></route></indexroute></route></code>
uiはデータ駆動型です。データは店内に存在します。 UIの変更は、ストアデータの更新から発生します。
データは、小道具を介して高レベルから下位レベルのコンポーネントに一方向に流れます。
Store
コンポーネントは、データが高レベルから低レベルのコンポーネントにどのように流れるかを示しています。
AppStore.js
<code class="language-javascript">// 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) } })</code>、
、、などの他のコンポーネントの完全なコードは、簡潔にして省略されていますが、参照されたgithubリポジトリで入手できます。)
App.js
cosmic js構成とサーバー側のレンダリング
<code class="language-javascript">// 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></loading></div>) } const Routes = React.cloneElement(this.props.children, { data: data }) return ( <div> <nav data="{data}/"> {Routes} <footer data="{data}/"> </footer></nav> </div> ) } }</code>
config.js
ファイルは、宇宙JS CMSに接続するために使用されます。 app-server.js
ファイルは、ReactDOMServer.renderToStaticMarkup
を使用してサーバー側のレンダリングを処理します。 package.json
スクリプトは、開発と生産のビルド用に構成されています。
結論
このチュートリアルは、堅牢でスケーラブルなReact Universalブログアプリを構築するための基盤を提供します。フラックスアーキテクチャとサーバー側のレンダリングを使用すると、パフォーマンス、SEO、および保守性が向上します。 完全なコードはGitHubで利用できます。 FAQセクションでは、フラックス、反応、およびユニバーサルアプリケーションに関する一般的な質問に対処しています。以上がReact Universalブログアプリの構築:フラックスの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。