这是我的组件,剥去了所有漂亮的东西:
const MyOtherComp = ({message}) => {
return (
<div className="message">{message}</button>
)
}
class MyComp extends React.Component {
constructor (props) {
super(props)
this.handleSubmit = this.handleSubmit.bind(this)
}
state = {
fileUploadMessage: "",
}
handleSubmit (e) {
e.preventDefault()
axios.post('post-url',
formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then(function (response) {
console.log(this)
this.setState({fileUploadMessage: response})
})
.catch(function (error) {
console.log(error.response)
})
}
render () {
return (
<form onSubmit={this.handleSubmit}>
<button type='submit'>Submit</button>
<MyOtherComp message={this.state.fileUploadMessage} />
</form>
)
}
}
export default MyComp
如您所见,我已将上部组件this
的{{1}}对象绑定到MyComp
处理程序的this
对象。
我期望:返回handleSubmit
时,axios
的{{1}}对象应包含一个名为this
的方法,因为handleSubmit
组件具有它(就像所有React类组件一样)。因此-setState
范围内的MyComp
应该与this
范围相同。
实际发生的情况:当我检查axios
对象(请参阅handleSubmit
子句中的this
)时,它就是console.log
。
我缺少明显的东西吗?
答案 0 :(得分:2)
您正在.then
内创建一个新函数,该函数将创建this
的新范围。将其更改为箭头功能,它应该可以工作-
.then((response) => {
console.log(this)
this.setState({fileUploadMessage: response})
})
如果您不想使用箭头功能,那么
.then(function (response) {
console.log(this)
this.setState({fileUploadMessage: response})
}.bind(this))