Javascript 为什么使用回调函数设置状态时出现错误:“;TypeError:无法读取属性‘;文件’;“无效”的定义;而正常的setState方法工作正常吗?
我有一个用例,您能帮助我了解回调Javascript 为什么使用回调函数设置状态时出现错误:“;TypeError:无法读取属性‘;文件’;“无效”的定义;而正常的setState方法工作正常吗?,javascript,reactjs,Javascript,Reactjs,我有一个用例,您能帮助我了解回调setState方法和普通setState方法在什么时候执行,这两个方法与执行点有什么不同 handleselectedFile = event => { this.setState((prevState, props) => { return { selectedFile: event.target.files[0], loaded: 0, fileName: event.target.files[0
setState
方法和普通setState
方法在什么时候执行,这两个方法与执行点有什么不同
handleselectedFile = event => {
this.setState((prevState, props) => {
return {
selectedFile: event.target.files[0],
loaded: 0,
fileName: event.target.files[0].name
};
}
})
};
当事件被触发,子类调用方法,并将事件传递给父类,在父类中执行上述方法时
上述方法引发此错误:
“TypeError:无法读取null的属性“文件”
如果我用普通的setState
方法替换上面的setState
回调方法,一切都会正常工作
handleselectedFile = event => {
this.setState({
selectedFile: event.target.files[0],
loaded: 0,
fileName: event.target.files[0].name
})
};
任何帮助都将不胜感激,这是什么原因造成的。我搜索了很多,但没有找到任何相关的东西,或者可能不理解解决方案
读了这篇文章,但无法理解我的情况中的问题:可能缺少函数方括号
handleselectedFile = event => {
this.setState((prevState, props) => { <-- here
return {
selectedFile: event.target.files[0],
loaded: 0,
fileName: event.target.files[0].name
};
})
};
handleselectedFile=event=>{
this.setState((prevState,props)=>{在第一个方法上的箭头后删除'return'。要理解错误发生的原因,您需要了解箭头函数的工作方式。箭头函数通常如下所示:params=>returnValue
或this:params=>{/*function body*/}
您有params=>return{ ... }
edit:…a您刚刚插入了缺少的braces@ChrisG很抱歉,我在删除控制台代码的过程中错过了这些大括号。很高兴它有所帮助you@ShubhamKhatri是的,这确实非常有帮助,因为我是一个新的反应者,我不知道合成对象属性在seState回调函数中变为null以增加执行再次感谢。无论是这样做,还是删除return
并在从arrow函数返回的对象周围添加括号,都应该可以做到。因此(prevState,props)=>({selectedFile…})
谢谢,在删除某些行时一定错过了这些。
handleselectedFile = event => {
this.setState((prevState, props) => { <-- here
return {
selectedFile: event.target.files[0],
loaded: 0,
fileName: event.target.files[0].name
};
})
};