(抱歉,标题上的措词不好...找不到合适的措词。)
我有一个方法,它会发出放置请求,然后更新状态。
在下面的示例中,key_in_state
是具有唯一ID作为关键字的字典。它检查字典是否包含旧的响应数据。如果是这样,请更新该特定版本。
method_name = () => {
let key_in_state_1 = { ...this.state.key_in_state_1 }
let key_in_state_2 = { ...this.state.key_in_state_2 }
axios.put( someurl )
.then( res => {
if ( key_in_state_1[ res.data._id ] ) {
key_in_state_1[ res.data._id ] = res.data
}
if ( key_in_state_2[ res.data._id ] ) {
key_in_state_2[ res.data._id ] = res.data
}
this.setState( {
key_in_state_1,
key_in_state_2
} )
} )
}
如上例所示,单次调用this.setState
会更有效,还是在每个if语句中调用this.setState
会更好,所以我们不需要重写状态是否没有新数据?
method_name = () => {
let key_in_state_1 = { ...this.state.key_in_state_1 }
let key_in_state_2 = { ...this.state.key_in_state_2 }
axios.put( someurl )
.then( res => {
if ( key_in_state_1[ res.data._id ] ) {
key_in_state_1[ res.data._id ] = res.data
this.setState( { key_in_state_1 } )
}
if ( key_in_state_2[ res.data._id ] ) {
key_in_state_2[ res.data._id ] = res.data
this.setState( { key_in_state_2 } )
}
} )
}
有时响应不在词典中,因此我们甚至不需要更新它。
谢谢!