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
        };
      })
    };