2016-08-19 8 views
1

は、私は私のコンポーネントをレンダリングするときレンダリングコンポーネントのフィルタ機能でthis.stateを使用するにはどうすればいいですか?以下

somarray.user.filter(function(ele, index) { 
     if(this.state.showAllUser == false) { 
     return (index < 3) 
     } 
     else { 
     return true 
     } 
    }) 

、このフィルタ機能内部の「this.state.showAllUser」は定義されていません...私のコードです。

この問題を解決するにはどうすればよいですか?

+0

を期待するいくつかの関連の質問があります:(1)このコードが現れるコンテキストは何ですか? (2)コンポーネントの状態はどのように設定されていますか? (3) 'this.state.showUser'は未定義ですか、' this.state'は未定義ですか? –

+0

'this.state'は、Windowsオブジェクトで、getInitialState関数で設定したものではありません。 – Dreams

+2

これは 'filter'に渡された関数に' this'のスコープをバインドする必要があることを意味します。 'somearray.user.filter'を呼び出すスコープ内のコンポーネントインスタンスを' this 'とすると、 'somearray.user.filter(function(e、i){...} bind(this)) '。 [Here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this)は 'this'のいくつかのドキュメントで、[here](https://developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)は 'Function.prototype.bind'のドキュメントです。 –

答えて

3

これは関数で正しく定義されていません。正しい定義を持つようにバインドして修正します。

somarray.user.filter(function(ele, index) { 
     if(this.state.showAllUser == false) { 
     return (index < 3) 
     } 
     else { 
     return true 
     } 
    }.bind(this)) 
+0

ありがとうございました。私はちょうど自分で考え出すが、それでも感謝する! – Dreams

2

またそうのような別の変数に格納することができます'this':

var self = this 
somarray.user.filter(function(ele, index) { 
    if(self.state.showAllUser == false) { 
    return (index < 3) 
    } 
    else { 
    return true 
    } 
}) 

'self.state.showAllUser'が値を持つことになります。この方法は、あなたがここに

関連する問題