2017-06-24 2 views
0

私はこのような「createFunctional」フラックスコンテナ機能を使用するフラックスパターンを持ってプロジェクトに取り組んでいます:フラックスコンテナ関数 'createFunctional'の目的は何ですか?

import {Container} from 'flux/utils'; 
import View from './MyView.js'; 
import AppStore from './AppStore.js'; 

function getStores() { 
    return [ 
    AppStore 
    ]; 
} 

function getState() { 
    var state = { 
    pie: AppStore.getState(), 
    }; 

    return state; 
} 

export default Container.createFunctional(View, getStores, getState); 

私はより良い、このコードを理解したいと思いますが、私はそれが難しいのドキュメントを見つけるために探していますこの関数。

私は何とかビューに格納し、状態機能を結合されている推測していて、それが何らかの形で(私はexample on the flux websiteに基づいて再構築している)、このコードと同じものです:

class MyView extends Component { 
    static getStores() { 
    return [AppStore]; 
    } 

    static calculateState(prevState) { 
    return { 
     pie: AppStore.getState(), 
    }; 
    } 

    render() { 
    return <div>blah..</div>; 
    } 
} 

const container = Container.create(CounterContainer); 
+0

私は以前は純粋なフラックスを使用していませんでしたが、ソースを調べてみると、これはreduxの 'connect'と似ています。私は店舗の変化を見て、変化があるときには、全体の状態を下位のコンポーネント(最初のパラメータ)に渡します。 – Sulthan

答えて

1

探しsource codeにはかなり単純です。

コンテナコンポーネントを作成します。コンポーネントは、指定されたすべてのストアにサブスクライブします。店舗に変更があった場合は、getState機能を使用して重要なものを取得します。

getStateの結果は、容器のthis.stateに保存されます。

コンテナのrender機能は、単にViewをレンダリングし、状態全体(結果はgetState)をプロパティとして渡します。つまり、コンテナはストアの変更を監視し、それらをプロパティとしてビューに渡します。これにより、コンポーネントの設計が簡素化されます。これは、ストアの状態とサブスクリプションを処理する必要がないためです。

+0

本当にソースを確認することをお勧めします。フラックス(またはレフィックス)の実装がいかに簡単かは興味深い。 – Sulthan

+0

あなたは私の質問で持っているコードの2ビットが同じものであると言うでしょうか? –

+0

@OliverWatkins多かれ少なかれ、https://github.com/facebook/flux/blob/master/src/container/FluxContainer.js#L245を参照してください。「createFunctional」はほとんど同じですが、より一般的です。それはあなたが追加のプロパティを渡すことを可能にし、コンテキストに関連するエッジケースではおそらくいくつかの重要性を持つコンテキストを渡します。 – Sulthan

関連する問題