2016-08-17 11 views
2

.jsファイルから関数を公開することをお勧めします。その関数内では、ストア内の変数にアクセスすることをお勧めします。関数内のreduxストアへのアクセス

コードのスニペット: -

import { connect } from 'react-redux'; 

function log(logMessage) { 
    const {environment} = this.props; 
    console.debug('environment' + environment + logMessage); 
    .... 
} 

function mapStateToProps(state) { 
    return { 
     environment : state.authReducer.environment 
    }; 
} 

export default function connect(mapStateToProps)(log); 

私は、connectを通じてクラスを添付して、多くの部品を、持っている私はconnect()を通じて機能を付けることができますか?

答えて

3

編集1

Some_File.js

import store from './redux/store.js'; 

function aFunction(){ 
    var newState =store.getState(); 
    console.log('state changed'); 
} 

store.subscribe(aFunction) 

私はReduxのは、期待してあなたが店やレデューサーを作成していると仮定しています。

~~~~~~~~~~~~~~~

オリジナル回答は

これは、私はあなたがそうしているのか分からないハック、の一種であるを開始します私はあなたがそれをしてはならないと言いたいことはできません。しかし、あなたはこのようにすることができます。いくつかの変更を加えてコードの一部をコピー貼り付けました。

Class XYZ extends React.Component{ 
    componentWillReceiveProps(props){ 
     //in your case this.props.storeCopy is redux state. 
     //this function will be called every time state changes 
    } 

    render(){ 
     return null; 
    } 
} 



function mapStateToProps(state) { 
    return { 
     storeCopy : state 
    }; 
} 

export default function connect(mapStateToProps)(XYZ); 

状態は、このコンポーネントのこのcomponentWillReceivePropsが呼び出されます変更するたびに、ありちょうどprovider内、一番上にどこかに、このコンポーネントを置きます。

+0

Praveen、これは問題を解決しないかもしれません。これは反応の中でレフィックスを使用する標準的な方法です。私が探しているのは、XYZ componenetの代わりにxyzを関数として作って、小道具を介して店にアクセスして何かを返すことです。マルコのコメントは意味をなさない。 – raaone7

+0

私の理解では、redux-storeの変更ごとに呼び出される関数を探していますか?そして、私はあなたの計画は、そのfnをコンポーネントにインポートし、redux-store-> Fn-> Componentのときにコンポーネントを変更することだと思います。そうでなければ、あなたの質問に疑似コードを少なくとも書くようにして、あなたがしようとしていることを理解し、やり方を提案することができます。ありがとう。 –

+0

Praveen、簡単な言葉で、1行の問題文は「関数内のreduxストアへのアクセス」です。つまり、反応しない通常の関数の中でreduxストアにアクセスすることができますか? – raaone7

0

ストアにアクセスする適切な場所は、コンテナを介してです。connectは、コンテナをコンポーネントに接続するために使用されます。ランダムな機能を接続することはできません。

reduxのためのlogger middlewareがあります。あなたが見てみることができないかもしれない、それは達成しようとしていることをしています。

ちょうどお店へのミドルウェアとして渡し、それを使用するには:Reduxのアプリをデバッグする

import createLogger from 'redux-logger'; 

const store = createStore(
    reducer, 
    applyMiddleware(logger) 
); 

より適切な方法は、React Dev Toolsを使用することですあなたがChromeを使用している場合、私が使用することをお勧めいたしますReact Dev Tools Extension。ただ、install itとアクションが解雇されて見て、彼らは店にどのような影響を与えるか、あなたの店の全体の状態を見ることができます任意の時点でのミドルウェアそれで

let store = createStore(reducer, window.devToolsExtension && window.devToolsExtension()); 

、としてそれを使用する、とさえすることにより、アプリケーションを巻き戻し実行していない操作。

+0

こんにちはMarcoさん、はい、私はreduxロガーを使用して、アクション/状態をredux-storageに記録しています。その目的には役立たないでしょう。私が達成したいのは、単純な関数アクセスを店舗に持たせることで、私は減速機内の値を使うことができます。方法の1つは、店舗をJS(アンチパターン)に直接インポートすることです。 reduxのconnect()関数に関数をバインドする方法はありますか? – raaone7

+0

@ user2178209達成しようとしていることは明確ではありません。なぜ、減算器にストア値を使用する必要がありますか?reduceはすでにアクションが発生したときの状態を取得します。 –

+0

私が意味していたことは、関数内でストア(減算器)の値にアクセスし、その関数をさまざまなコンポーネントで使用するために公開する必要があるということです。 – raaone7

0

はい。以下のようにconnectを使って関数をアタッチすることができます。

const mapDispatchToProps = (dispatch) => { 
    return { 
     testFunction: (param1) => dispatch(testFunction(param1)), 
     testFunction1:() => dispatch(testFunction1()) 
    }; 
}; 

export default function connect(mapStateToProps, mapDispatchToProps)(log); 
+1

JagKumは、上記のコードのlog()関数です。私はログに属しているコードをどこに置きますか? – raaone7

関連する問題