gpt4 book ai didi

javascript - 如何将 "this"纳入 ReactJS ES2015 异步函数的范围?

转载 作者:行者123 更新时间:2023-12-02 13:51:50 25 4
gpt4 key购买 nike

下面是 ES2015 类中的一个方法。

它不能是箭头函数,因为它是异步函数。

但由于它不是箭头函数,因此“this”不在范围内,因此我无法执行 setstate 之类的操作。

有人可以建议我如何将其纳入范围吗?谢谢!

  async doSubmit(email_address, password) {
this.setState({isSubmitting: true, error: null})
try {
let data = await this.props.app.server.doSignIn(email_address, password)
} catch (jqXHR) {
let errorType = (jqXHR.status >= 400 && jqXHR.status < 500) ? 'application' : 'system'
let errorMessage = (errorType === 'application') ? jqXHR.responseJSON.description : jqXHR.error
this.setState({error: errorMessage, isSubmitting: false})

}
// following a signin event make sure the user image changes
this.props.app.reloadProfileImages()
try {
await this.props.app.initializeClouds()
} catch (err) {
xog('err', err)
this.setState({error: errorMessage, isSubmitting: false})
}
this.postSignIn(data)
}

最佳答案

由于您已经使用 async/await ES7 功能,您还可以使用属性初始值设定项语法自动将 this 纳入范围内。它位于 stage-2 Babel 预设中。

class Example extends React.Component {
doSubmit = async (email_address, password) => {
this.setState({isSubmitting: true, error: null})
try {
let data = await this.props.app.server.doSignIn(email_address, password)
} catch (jqXHR) {
let errorType = (jqXHR.status >= 400 && jqXHR.status < 500) ? 'application' : 'system'
let errorMessage = (errorType === 'application') ? jqXHR.responseJSON.description : jqXHR.error
this.setState({error: errorMessage, isSubmitting: false})
}
...
}

render() {
return (
<button onClick={this.doSubmit("test@email.com", "password")} />
)
}
}

关于javascript - 如何将 "this"纳入 ReactJS ES2015 异步函数的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40969831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com