2016-12-08 133 views
2

我收到一個錯誤「TypeError:在ReactJS中做一件簡單的事情時,無法讀取屬性'undefined'的屬性'setState'。我正在嘗試使用axios來填充輸入和響應數據。迄今沒有成功。 我對axios和ReactJs都很陌生,所以它可能是我忽略的一些非常簡單的東西?Axios ReactJS - 無法讀取未定義的屬性'setState'

我希望「響應文本」在TypeError修復後顯示在窗體的輸入字段中。

這是我的組件:

class BasicInfoBlock extends React.Component { 

constructor(props) { 
    super(props); 

    this.state = { name : "EventTestName" }; 
} 

componentDidMount() { 
    axios 
    .get(getBaseUrl()+`get`) 
    .then(function (response) { 
     this.setState({name: "RESPONSE TEXT"}); 
     //this.setState({name: response.data.name}); 
    }) 
    .catch((e) => 
    { 
     console.error(e); 
    }); 
    //this.setState({}); 
} 


render(){ 
    return(
      <form className="form-horizontal"> 
       <div className="form-group"> 
        <label htmlFor="eventName" className="col-sm-2 control-label">Name</label> 
        <div className="col-sm-10"> 
        <input type="text" id="eventName" className="form-control" placeholder="Event name" defaultValue={this.state.name}/> 
        </div> 
       </div> 
      </form> 
     ); 
} 

}

謝謝您的幫助

編輯:這不是一個重複的問題,這個問題涉及到「這個」不是可用回電話。被選爲重複的問題與綁定有關。

+1

的可能的複製[遺漏的類型錯誤:無法讀取的未定義的屬性「的setState」](http://stackoverflow.com/questions/32317154/uncaught-typeerror-你可以通過使用箭頭功能這樣的修正can not-read-property-setstate-of-undefined) –

+1

問題是回調函數內部this的上下文。 –

+0

不是重複的,請閱讀編輯 – rluks

回答

9

在Promise的方法中,this將不再引用該組件。

componentDidMount() { 
    axios 
    .get(getBaseUrl()+`get`) 
    .then((response) => { 
    this.setState({name: "RESPONSE TEXT"}); 
    //this.setState({name: response.data.name}); 
    }) 
    .catch((e) => 
    { 
    console.error(e); 
    }); 
    //this.setState({}); 
} 
+0

謝謝,錯誤消失了。但是,我的輸入字段仍然沒有填入「RESPONSE TEXT」,我不知道爲什麼。 – rluks

+1

@rluks你需要設置'value'屬性,而不是'defaultValue'。要壓制React將會拋出的警告,您可以用空字符串初始化'this.state.value' – Bojangles

+0

您設置了prop defaultValue,而不是值。默認值只會在mount時初始設置,而不是在調用setState時設置。我建議閱讀關於受控組件的React文檔。 –

相關問題