javascript - 使用回调响应 setState 并传递道具
问题描述
我有一个文件上传组件(我在 React 中工作),它通过点击处理程序触发文件上传。我想在上传过程中显示加载图标。所以我有一个加载状态,当调用文件处理函数时,我将其设置为 true。但是,状态更改有时仅在文件上传开始之前呈现,在此期间浏览器冻结。所以我四处搜索,发现我可以将回调传递给 setState,它会在状态更改和组件重新渲染后触发。但是在我的情况下,我需要将从事件收集的文件传递给这个回调函数......但这不起作用。我努力了:
handleFile(files) {
this.setState({ loading: true }, () => {
console.log(files)
// here is where I want to read the files
})
}
-- 这记录:文件列表 {长度:0}
handleFile(files) {
this.setState({ loading: true }, (files) => {
console.log(files)
// here is where I want to read the files
})
}
-- 这记录未定义。
有什么想法我在哪里出错了吗?顺便说一句,事件在另一个函数中处理,并且事件目标(文件)正在传递给 handleFiles 函数,问题似乎是将文件传递给回调。
谢谢
解决方案
我建议使用 promise 来处理异步请求;像 axios 这样的库效果很好。然后,您可以轻松管理状态更改。例如:
handleFile(url, files) {
this.setState({
loading: true
});
axios.post(url, {
data: files
}).then(response => {
this.setState({
loading: false
});
})
.catch(error => {
console.log('Error posting data.', error);
this.setState({
error: true
});
});
}
推荐阅读
- c# - 列表视图项目中的交替颜色
- string - 字符串修剪不适用于全局变量
- angular - Angular - 后期表单组初始化问题 - 不显示正确的值
- matlab - Floyd Steinberg Dithering Matlab - 我做错了什么?
- r - 根据年龄值预测浓度值
- facebook-graph-api - 为什么 Facebook Graph API 页面/事件受到速率限制?
- android - 如何使相对布局可滚动:Android
- python - keras 迁移学习中的混淆矩阵
- c++ - 合并排序基本案例
- reactjs - React Re-Render Component on props Change