私は反応コンポーネントをやっています。私は目的球の内側に共通AJAX呼び出しを持っている:関数内の状態を変更する方法
getPost = (postName, storage) => {
this.setState({fetchInProgress: true})
$.ajax({
url: "/api/getitems",
type: "GET",
dataType: 'json',
ContentType: 'application/json',
data: {modelName: postName},
success: (data) => {
this.setState({
storage: data,
fetchInProgress: false
})
},
error: (jqXHR) => {
this.setState({fetchInProgress: false})
console.log('ERRORR')
}
})
}
は、私はこのようにそれを呼び出す:
this.getPost('StandartPost', this.state.standartPosts)
が、それは仕事をdoens't。私は多くの異なるタイプの投稿を持っています。今の私はスイッチを使用してこれをしなかった:
success: (data) => {
switch(postName){
case: 'StandartPost'
this.setState({
standartPosts: data,
fetchInProgress: false
})
...and so on
}
}
をここに私は私の関数の2番目のパラメータを使用していませんよ。しかし、あまりにも多くのコードがあります。私はちょうどthis.setStateメソッド内のキーとしてthis.state.something使用しようとしました::
success: (data) => {
this.setState({
storage: data,
fetchInProgress: false
})
}
this.getPost('StandartPost', this.state.standartPosts)
UPD:このようにそれを行うための方法があるだけでなく
this.setState({
this.state.data: data,
fetchInProgress: false
})
、それを何もしません。 this.state.dataはまだ空の配列です。
UPD2:
success: (data) => {
this.state[storage] = data
this.setState({
fetchInProgress: false
})
と、このようでgetPost(postName、ストレージ)関数を呼び出します:
this.getPost('StandartPost', 'standartPosts')
そして、それが正常に動作します私は私のAJAX呼び出しに次のように行われまし。私はsetStateメソッドの中でデータを設定する方法を見つけることはできません。しかし、少なくともコードは少なくなります。
もしあれば何がありますか? – topher
私は自分のサーバーにも、反応コンポーネントによってもエラーはありません。しかし、私のコンポーネントはデータをレンダリングしません。 –
問題がsetState(){}で状態を変更していないかどうかを確認するために、componentDidUpdate(prevState){}とconsole.logを作成します。 –