2016-08-14 5 views
0

ボタンのクリックイベントの状態を変更するにはどうすればよいですか?今、私はエラーforEachループの状態を変更します

捕捉されない例外TypeErrorを持っている:this.setStateはない私は、私はここにthis.setState使用できないことを知っている機能

ですが、私は理解できないところ私はバインド

をしなければなりません
class Popup extends React.Component { 
    constructor(props){ 
    super(props); 
    this.state = {opened: false}; 
    } 

    componentDidMount(){ 
    var popupOpenBtn = document.querySelectorAll('[data-popup]'); 

    popupOpenBtn.forEach(function(item) { 
     item.addEventListener("click", function(){ 
     this.setState({ 
      opened: true 
     }); 
     }) 
    }); 
    } 
+0

これはボタンで、にconsole.log(この) – epascarello

+1

がSETSTATEを(呼び出して、直接this.stateを変異決して)その後は、あなたが作った突然変異を交換することができます。それが不変であるかのようにthis.stateを扱う。 – hakiko

+0

はい、あなたは正しいです。しかし、私はどのようにポップアップを取得し、その状態を変更できますか? –

答えて

2

クリックハンドラは、クラスではなくボタンにスコープが設定されています。代わりにこれを試してみてください:

class Popup extends React.Component { 
    constructor(props){ 
    super(props); 
    this.state = {opened: false}; 
    } 

    componentDidMount(){ 
    var popupOpenBtn = document.querySelectorAll('[data-popup]'); 
    var component = this; 

    popupOpenBtn.forEach(function(item) { 
     item.addEventListener("click", function() { 
     component.setState({ 
      opened: true 
     }); 
     }) 
    }); 
    } 
+0

この状況で私はUncaught TypeErrorを持っています:未定義のプロパティ 'setState'を読み取ることができません。だからここ*この*は私のコンポーネントではありません –

+0

うん、それは動作します!ありがとう! –

関連する問題