除非库公开其内部状态(不应该公开),否则不能使数据本身成为被动的。我认为
getFiles()
每次返回一个新数组,而不是内部引用,所以类似
reactive(uppy.getFiles())
不会起作用。
一般的方法是像连接Vue组件一样连接库,只是在使用props将数据传递给组件的情况下,将API函数与库一起使用,并使用库的事件来检索更新。
使用Uppy中的文件数组,可以使用
addFile()
和
removeFile()
方法将数据传递给Uppy并使用事件
files-added
和
file-removed
以检索更新。
以下是最小设置:
const uppy = new Uppy().use(...)
const files = ref([])
uppyInstance.on('files-added', (addedFiles) => files.value.push(...addedFiles))
uppyInstance.on('file-removed', (removedFile) => files.value = files.value.filter(file => file !== removedFile))
// or just
uppyInstance.on('files-added', () => files.value = uppy.getFiles())
uppyInstance.on('file-removed', () => files.value = uppy.getFiles())
现在
files
将始终与Uppy实例保持同步。您可以将其封装到Vue组件中(如果不需要模板代码,则可以组合)。看看
playground
。
如果你想写一个完整的包装器,你可以使用同样的原理来公开Uppy中的其他事件并将数据传递给它。最后,你可以写这样的东西:
<uppy-drag-n-drop
v-model="files"
:note="Upload File"
@onDragOver="..."
/>