コンポーネントの状態を変更しようとするとエラーが発生します。スーパーエージェントとリアクトを使用したAPIレスポンスからsetState
Uncaught TypeError: Cannot read property 'setState' of undefined
constructor(props){
super(props);
this.state={
r:'',
message:''
};
this.setStateMessage = this.setStateMessage.bind(this);
}
setStateMessage (e){
e.preventDefault();
var test = this.state.message;
request
.post('http://127.0.0.1:5000/api/db')
.send({message: this.state.message})
.accept('application/json')
.withCredentials()
.end(function(err, res){
if(err)
throw err;
this.setState({ r: res.body.message });
});
}
render() {
return (
<div>
<div className='response'>
{this.state.r}
</div>
//form with input
</div>
)}
私は今日目を覚まし、実際にコールバック関数に関連しているという考えを持っていました問題のrit。私の最高の推測は、 'var res = request.post( '......);'のようなものを書いてコールバック関数の外でsetStateで 'res'を使うことでしたか?それは3番目の選択肢でしょうか? – Ando
最後にもう1つの質問...私がReduxを使用していたら、私は 'ディスパッチ 'を使うことができました。それはReduxの機能が世界的に欠けているからですか? – Ando
'dispatch'はグローバルに定義されていません。 reduxを使用している場合は、 'redux-thunk'を使用して非同期アクション内からAPIを呼び出す必要があります。例を使って質問に答えるのは少し難しいです。しかし、このコールバックから 'this.setState'を呼び出さないので、この問題は発生しません。それはあなたがJSの 'this'の読書をするべきだと言った。さもなければあなたはどこか他の場所で混乱するだろう。 – aray12