2017-10-31 4 views
0

関数内でsetStateを呼び出そうとすると、「TypeError:プロパティ 'setState'が未定義です」というメッセージが表示されます。 代わりに矢印関数を宣言すると機能しますが、なぜわかりませんか?React-JS TypeError:未定義のプロパティ 'setState'を読み取ることができません

import React, { Component } from 'react'; 

class Note extends Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      editing: false 
     } 
    } 

    edit(){ 
     this.setState({ editing: true }) 
    } 

    save() { 
     this.setState({ editing: false }) 
    } 

    renderEditNote() { 
     return (
      <div className="note"> 
       <textarea></textarea> 
       <button onClick={this.save}>SAVE</button> 
      </div> 
     ) 
    } 

    renderDisplayNote() { 
     return (
      <div className="note"> 
       <p>{this.props.children}</p> 
       <span> 
        <button onClick={this.edit}>Edit</button> 
        <button onClick={this.remove}>X</button> 
       </span> 
      </div> 
     ) 
    } 

    render() { 
     return this.state.editing ? this.renderEditNote() : this.renderDisplayNote() 
    } 
} 

export default Note 
+0

あなたが設定されているthis' 'よろしいですか? – Zak

+0

'this'の値は*関数が*呼び出される方法*に依存します。また、[コールバックの中で正しい 'this'にアクセスするにはどうすればいいですか?](https://stackoverflow.com/q/20279484/218196) –

+0

リンクをありがとう、それは私に明快さをもたらしました – netjens

答えて

0

理解するために、これらの方法ではconsole.log(this)を行うことができます。例えば

<button onClick={this.edit.bind(this)}>Edit</button> 

それともとしてconstructorでそれを行うことができます。

this.edit = this.edit.bind(this);

+0

ありがとう方法。 – netjens

0

それが動作するようにするには、あなたが

this.save.bind(this) 
this.edit.bind(this) 
this.remove.bind(this) 

を行う必要がありますあなたはまだそれをバインドするので、これはあなたの方法の編集に()、(保存)し、削除されていない(注)ではありませんクラス。 あなたはonClickによりバック呼び出されたとき、それが失われないようにするには、editsave機能のためにbindthisに必要とする理由

関連する問題