2016-05-20 4 views
2

反応コードに再選択を追加しようとしていますが、常に再レンダリングされているようです。常に再レンダリングを再選択してください

私の状態を変更するたびに、入力セレクタが変更されていなくても、コンソールは「テスト」を表示します。私はあなたに何が起こっているかを示す簡単なテストを作成しました。

import { connect } from 'react-redux' 
import { createSelector } from 'reselect' 

window.testObject = {'x': '5'} 
const mapStateToProps = (state, props) => { 

    const test = state => {return window.testObject} 
    const getTest = createSelector(test, (t)=> console.log('testing')) 

    return { 
     test: getTest(state), 
    } 
} 


export default const TestContainer = connect(
    mapStateToProps, 
)(TestBase) 

何が間違っていますか?私はドキュメントを読んだり、input-selectorが変更されていないので、初めてconsole.logを実行してはいけないと言うことができます。私はそれを正しく理解していますか?

+4

私は考えていないのcreateSelector外は 'reselect'が深い比較を行い、再レンダリングします。 'getTest'が呼び出されるたびに、新しいオブジェクトが返されます。 –

+0

あなたは正しいです、それを実現する必要があります。オブジェクトをグローバルにして、それが動作するかどうかを調べるつもりです:) –

+0

グローバルオブジェクトを使用するようにサンプルを更新しました。それでも同じように "テスト"が表示されます –

答えて

5

あなたはそれが毎回createSelectorを呼んでいる

移動mapStateToProps

const getTest = createSelector(...) 

const mapStateToProps = (state, props) => ({ 
    test: getTest(state), 
}) 

export default const TestContainer = connect(
    mapStateToProps, 
)(TestBase) 
+0

あなたはちょうど私の心を吹き飛ばしました。ありがとう、私は今これを試してみよう! –

+0

それは働いた!ありがとうございました!! –

+1

私の喜び:) –

関連する問題