setState 回调中的此值。一个小小的困惑
This value on setState callback. A tiny confusion
问题:setState(?)回调中this的值是多少
考虑一下:
handleChange = (event) => {
const { name, value } = event.target;
const {content, errors} = this.state;
this.setState({
content: {
...content,
[name]: value
},
状态的简单更新...但之后我调用了回调,并尝试访问我的 var content 或 errors,那些值是多少?。
this.setState({
content: {
...content,
[name]: value
},
errors: {
...errors,
[name]: validations[name] && validations[name](value)
}
}, () => {
// commenting this line, I get the content out of date.
// const {content, errors} = this.state;
! this.hasErrors() //if doesn't have errors.
? this.props.fn({...content, students : [content.studentA, content.studentB]})
: this.props.fn({...content, hasError: true, errors}) //should be emptyField(?)
})
内容或错误值有点旧,所以我需要"updated"它从this.state中获取老化的值。
const {content, errors} = this.state;
如果没有前一行,当我尝试访问内容或错误时,我会得到前一个状态的值。我需要重新声明内容和错误,以获得更新的状态。
谁能给我解释一下这是怎么回事?
我认为你不需要再传播旅游错误或内容你能解释更多吗,你到底想做什么?
我假设您想在 setState 之后立即使用更改后的状态?
如果是这样,您通过添加回调就部分正确了。
但是您使用的是设置新状态之前的状态中的 content 状态。相反,您应该使用 this.state.content
所以你需要 const {content, errors} = this.state;
原因:
setState 是异步的,因此您不能假设状态在您调用 setState 后立即发生了变化。而 setState 调用前的内容和错误只会在重新渲染后得到新的值。在重新渲染之前访问的唯一方法是添加回调并使用 this.state.variable 访问它。
问题:setState(?)回调中this的值是多少
考虑一下:
handleChange = (event) => {
const { name, value } = event.target;
const {content, errors} = this.state;
this.setState({
content: {
...content,
[name]: value
},
状态的简单更新...但之后我调用了回调,并尝试访问我的 var content 或 errors,那些值是多少?。
this.setState({
content: {
...content,
[name]: value
},
errors: {
...errors,
[name]: validations[name] && validations[name](value)
}
}, () => {
// commenting this line, I get the content out of date.
// const {content, errors} = this.state;
! this.hasErrors() //if doesn't have errors.
? this.props.fn({...content, students : [content.studentA, content.studentB]})
: this.props.fn({...content, hasError: true, errors}) //should be emptyField(?)
})
内容或错误值有点旧,所以我需要"updated"它从this.state中获取老化的值。
const {content, errors} = this.state;
如果没有前一行,当我尝试访问内容或错误时,我会得到前一个状态的值。我需要重新声明内容和错误,以获得更新的状态。
谁能给我解释一下这是怎么回事?
我认为你不需要再传播旅游错误或内容你能解释更多吗,你到底想做什么?
我假设您想在 setState 之后立即使用更改后的状态? 如果是这样,您通过添加回调就部分正确了。
但是您使用的是设置新状态之前的状态中的 content 状态。相反,您应该使用 this.state.content
所以你需要 const {content, errors} = this.state;
原因: setState 是异步的,因此您不能假设状态在您调用 setState 后立即发生了变化。而 setState 调用前的内容和错误只会在重新渲染后得到新的值。在重新渲染之前访问的唯一方法是添加回调并使用 this.state.variable 访问它。