Reactjs 根据文档的拖放位置在firestore中订购文档

Reactjs 根据文档的拖放位置在firestore中订购文档,reactjs,firebase,google-cloud-firestore,Reactjs,Firebase,Google Cloud Firestore,我的目标是渲染我的LinkContainer组件,以便它们在我的拖放上下文中: {(已提供)=>( {links.map((l,索引)=>{ 返回( {(已提供)=>( )} ); })} )} 这是一个允许我拖放的功能,同时还可以将链接设置为新订单: const-reorder=(链接、开始索引、结束索引)=>{ const result=Array.from(链接); 常数[移除]=结果拼接(起始索引,1); 结果:拼接(末端索引,0,移除); 返回结果; }; //手柄拖动端

我的目标是渲染我的
LinkContainer
组件,以便它们在我的拖放上下文中:


{(已提供)=>(
    {links.map((l,索引)=>{ 返回( {(已提供)=>(
  • )} ); })}
)}
这是一个允许我拖放的功能,同时还可以将
链接设置为新订单:

const-reorder=(链接、开始索引、结束索引)=>{
const result=Array.from(链接);
常数[移除]=结果拼接(起始索引,1);
结果:拼接(末端索引,0,移除);
返回结果;
};
//手柄拖动端
常量handleOnDragEnd=(结果)=>{
控制台日志(结果);
setLinks(重新排序(链接,result.source.index,result.destination.index));
};
如何更新firebase记录,以便在重新加载页面上通过
链接进行映射时,
LinkContainer
以最后的顺序呈现


我是否必须在文档本身上创建索引,并使用
链接容器的位置更新该索引?基于您添加属性以将其用作索引的建议,我想分享以下观察结果:

例如,使用这种方法,您需要更新列表上的所有元素,以便在数据库上重新创建新的顺序,这将在每次移动对象时执行

如果这是一个小集合,这将起作用,但是如果您的集合有很多对象,或者如果您经常移动对象,这将转换为大量的读写操作

在最坏的情况下

另一种选择是创建一个具有所需顺序的数组(数组始终是静态的),例如,这是集合中对象的默认状态

["1a","1c","2b","3x"]
但在前端的移动之后,看起来是这样的

["1a","2b","3x","1c"]
前端的状态可以存储在单独集合中文档内的数组中,以避免修改原始对象并避免在每次移动中重新更新所有元素,但这将继续受到用户在前端执行的移动量的影响,并且需要根据集合上文档的创建或删除来更新数组

您必须按照数组顺序以所需的方式显示信息


最后一种选择,也可能是效率较低的方法是每次发生移动时重写整个集合(使用前端快照),重写集合算作一次写入操作,但这可能会在并发操作中产生将来的问题。

这太棒了!非常感谢。
["1a","2b","3x","1c"]