云文档的开发已经一周了,整个文档基本开发完了,与其说是开发完了不如说是已经写好了整个的Demo,以后肯定还要加许多功能的。我想在这里说一下我开发的时候遇到的困难和解决方案。和我学习到了什么。
困难一-使用数组存储,每次改变使用useState改变值,删除值,查找值,几乎都要遍历一遍数组。
我最开始是将文件列表以数组的形式储存在了useState中,对象的形式如下。
export type defaultFiles = {
id:string
title: string
body?: string
isNew?: boolean
path?: string
isLoaded?: boolean
}[]
于是我做了一个大胆的决定,将数组存储改成对象储存,改成了如下的结构。
export type defaultFiles = {
[key:string]: {
id:string
title: string
body?: string
isNew?: boolean
path?: string
isLoaded?: boolean
}
}
其中对象属性的key值就是id值。这样查找id的使用就可以直接defaultFiles.id,删除的时候可以delete defaultFiles[id],这样就省区了数组每次操作都要遍历的问题。目前我是这样存储的,如果要加上服务器的话,估计还是返回的数组的形式,为此我写了一个函数,将数组转换成对象的形式,且对象参数的key值是id值。
type defaultFilesType = {
id:string
title: string
body?: string
isNew?: boolean
path?: string
isLoaded?: boolean
}[]
export const flattenArr = (arr:defaultFilesType):Object => {
return arr.reduce((map:map,item) => {
map[item.id] = item;
return map;
}, {})
}
困难二-当软件没打开或者打开,本地目录中的文件被删除、修改、新增该怎么办?
我当时想的就是,我可以在软件中创建文件,但是如果本地的文件被用户故意的修改怎么办呢?
看看我解决的逻辑。
我同样为监听目录的node封装了一个hooks。
总结