从本地计算机上传文件时未定义羽毛笔
Quill undefined when uploading a file from local machine
我是使用 React.js 和 Quill 的初学者。
我正在尝试通过重写现有的 imageHandler 从本地计算机上传文件。它确实获取了文件,但不上传它。错误如下:TypeError: Cannot read property 'quill' of undefined
。到目前为止,这是我的代码:
function imageHandler() {
console.log('Image Handler called');
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/*');
input.click();
input.onchange = async function () {
const file = input.files[0];
console.log('User trying to upload this:', file);
const formData = new FormData()
if (file !== null) {
formData.append('file', file)
}
fetch('https://smartquestionapi.advancity.net/Image', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'multipart/form-data',
},
body: formData
}).then(function (response) {
if (response.ok) {
return response.json()
} else {
return { "error": true }
}
}).then(function (json) {
console.log(file.name);
var cursorPosition = this.quill.getSelection();
var imagePath = "https://smartquestionapi.advancity.net/Images/" + file.name;
this.quill.insertEmbed(cursorPosition.index, 'image', imagePath, Quill.sources.USER);
return json;
}).catch(err => {
console.log("eror: ", err);
})
}.bind(this);
}
代码完全在 then(function (json){
函数中粉碎。
我想是因为你在这部分没有绑定 this
:
.then(function (json) {
console.log(file.name);
var cursorPosition = this.quill.getSelection();
可以用箭头函数解决:
.then((json) => {
console.log(file.name);
var cursorPosition = this.quill.getSelection();
再看一个 look here,看看 function(){} 和 (args..) => {}
之间的区别
我是使用 React.js 和 Quill 的初学者。
我正在尝试通过重写现有的 imageHandler 从本地计算机上传文件。它确实获取了文件,但不上传它。错误如下:TypeError: Cannot read property 'quill' of undefined
。到目前为止,这是我的代码:
function imageHandler() {
console.log('Image Handler called');
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/*');
input.click();
input.onchange = async function () {
const file = input.files[0];
console.log('User trying to upload this:', file);
const formData = new FormData()
if (file !== null) {
formData.append('file', file)
}
fetch('https://smartquestionapi.advancity.net/Image', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'multipart/form-data',
},
body: formData
}).then(function (response) {
if (response.ok) {
return response.json()
} else {
return { "error": true }
}
}).then(function (json) {
console.log(file.name);
var cursorPosition = this.quill.getSelection();
var imagePath = "https://smartquestionapi.advancity.net/Images/" + file.name;
this.quill.insertEmbed(cursorPosition.index, 'image', imagePath, Quill.sources.USER);
return json;
}).catch(err => {
console.log("eror: ", err);
})
}.bind(this);
}
代码完全在 then(function (json){
函数中粉碎。
我想是因为你在这部分没有绑定 this
:
.then(function (json) {
console.log(file.name);
var cursorPosition = this.quill.getSelection();
可以用箭头函数解决:
.then((json) => {
console.log(file.name);
var cursorPosition = this.quill.getSelection();
再看一个 look here,看看 function(){} 和 (args..) => {}
之间的区别