当前位置: 首页 > 知识库问答 >
问题:

this.state.file仍未定义this.set状态({file})[重复]

夏俊杰
2023-03-14

我有一个奇怪的问题,我想不出来。

我有一个按钮,我点击,一个文件窗口会出现

当用户选择一个文件并单击确定时,我有this.setState({file})来记录用户选择的文件。但它不起作用。

<div id="file-upload-submit-btn-container">
     <Button id="choose-file-btn" 
           onClick={this.buttonClick.bind(this)}>
            Choose file
     </Button>
     <input type="file" id="upload-input" 
            onChange={this.handleInputSelect.bind(this)} 
            onClick={(e) => e.target.value = null}  // reset input file
            multiple={false}/>
</div>

javascript

constructor() {
    super()
    this.state ={
        url: "https://example.com:8303",
    }
}


getFileUploader() {
    return $(this.refs.dropzone).find("#upload-input") 
}

buttonClick(e) {
    e.preventDefault()
    let $fileuploader = this.getFileUploader()
    $fileuploader.trigger('click');
}

handleInputSelect(e) {
    e.preventDefault()
    let file = e.target.files[0]
    this.setState({file})      <---- setState at here, but it is not getting recorded
    console.log(file, this.state.file)  <---file IS defined here but not this.state.file, why?

    this.handleUpload()
}

共有2个答案

厉文栋
2023-03-14

如果您想在设置state之后访问文件

你应该像这样使用它:

this.setState({file} , () => {
    console.log(file, this.state.file)
});

“quidproquo”解释了为什么在设置状态后不立即访问它。

将setState()视为更新组件的请求,而不是即时命令。为了更好地感知性能,React可能会延迟它,然后在一次过程中更新多个组件。React不保证立即应用状态更改。

陶高扬
2023-03-14

React.js文档:

setState()视为更新组件的请求,而不是立即命令。为了更好地感知性能,React可能会延迟它,然后在一次传递中更新几个组件。React不能保证立即应用状态更改。

 类似资料:
  • 我有一个处理程序,在输入字段发生变化时触发。但是,当我将状态日志记录到控制台resData是'未定义'?这是不可能的,因为console.log(身体)确实返回结果。

  • 注:在 Status.Code 中通过枚举的方式定义状态码,这些状态码的定义非常的有参考和借鉴价值,因此详细翻译了一遍。 定义和注释 OK(0):成功 操作成功完成 CANCELLED(1):被取消 操作被取消(通常是被调用者取消) UNKNOWN(2):未知 未知错误。这个错误可能被返回的一个例子是,如果从其他地址空间接收到的状态值属于在当前地址空间不知道的错误空间(注:看不懂。。。)。此外,A

  • 我知道这是一个具有约束力的问题,但我不确定在哪里绑定它。我尝试了一些不同的方法。 问题发生在应用程序上。\u当用户更改下拉框时选择。我希望它更新状态,以强制日历组件重新加载。 应用程序 选择器

  • 用车类型码 计价类型(rule) 用车类型(require_level) 描述 301(快车) 600 普通快车 900 快车优享 201(专车) 203(专车接机) 204(专车送机) 100 舒适型 400 六座商务 200 行政级 501(豪华车) 503(豪华车接机) 504(豪华车送机) 1000 普通豪华车 订单状态返回码 状态码 描述 300 等待应答 311 订单超时 400 等待

  • 自定义的状态栏覆盖在系统状态栏上,能够在自定义的状态栏中显示文字信息,可以隐藏自定义的状态栏,显示系统状态栏。 作者@贺坤Smaile 说:之前逛街看到移动做推广,有一个定位应用挺好的,合理的利用了状态栏,做了一些消息提醒和隐藏动画,自己回家就做了一个这样的demo,效果很不错,一个多月之前写的,看到有人求,分享出来。 [Code4App.com]

  • 我是新来的,你能告诉我这是什么意思吗? 我知道语法条件?cond_true: cond: false,但我不知道