node.js - axios发布后如何停止组件刷新。从formData上传图片后

标签 node.js reactjs axios multipartform-data

我正在构建一个博客构建器,我需要在其中上传图像,因为在 onChange 事件中选择了图像,并且上传图像的 url 需要在状态下更新。

发布图片上传请求后。组件会自动刷新,选定的文件和状态也会刷新。

如何阻止组件刷新和 setState 更新图像的正确 url..

handleChange = async (event) =>
{
    event.preventDefault();
    if(event.target.name == 'file')
    {


        var x=event.target.files[0]
        var y= event.target.name
        let formData = new FormData();
        formData.append('file',x)
        const response = await axios.post('http://localhost:8009/post/image',formData,{
           headers: {
             'Content-Type': 'multipart/form-data'
          }
        })
        let {data} = await response
        console.log(data)
        let file1 = data.name
        this.setState({
            content:{
                key:uuid(),
                name:y,
                file:file1,
                content:URL.createObjectURL(x)
            }
        })

   }
}

Image 的形式如下:
<input type="file" name="file" className="form-control-file"  onChange={this.handleChange} required/>

Node 上的后端:
router.post('/image',(req,res)=>
{
    console.log(req)

    let file = req.files.file;
    filename = Date.now() + '-' + file.name;

    file.mv(`./client/public/uploads/${filename}`, (err)=>{

        if(err) throw err;

    });
    console.log(`/uploads/${filename}`);
    res.json({name:`/uploads/${filename}`})
})

最佳答案

我看到您正在上传到本地环境。我在使用 Vue 时遇到了类似的问题,但后来偶然发现了 this answer @fanfare 指出,如果您使用任何类型的“热/实时刷新”(在 Vue 中称为热模块重新加载)并且文件正在上传到服务器监视更改的任何文件夹中,那么新文件被保存可能是刷新的原因。

在我的情况下,将文件保存在受监视文件夹之外解决了这个问题。

关于node.js - axios发布后如何停止组件刷新。从formData上传图片后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61684556/

相关文章:

node.js - 为什么在检查 npm 版本时命令提示符脚本关闭?

javascript - Material-UI,单选按钮+ map 功能(React JS)

axios - 如何从 Axios 获取响应时间

reactjs - 在 ReactJS 中四舍五入小数

javascript - 无法重置表单输入字段(React JS 控制组件)

javascript - 如何在 axios 中创建全局变量?

javascript - axios中的Header Content Type无法设置application/json

node.js - 客户应该为每个集合或每个文档制作一个变更流吗?

node.js - 如何在 mocha webdriverio 中使用 JavascriptExecutor

javascript - CRC-16-IBM 实现 (JS) 不工作