根据拖放位置对 firestore 中的文档进行排序

2023-12-26

我的目标是呈现我的LinkContainer组件,以便它们位于我的拖放上下文中:

<DragDropContext onDragEnd={handleOnDragEnd}>
          <Droppable droppableId="characters">
            {(provided) => (
              <ul
                className="characters"
                {...provided.droppableProps}
                ref={provided.innerRef}
              >
                {links.map((l, index) => {
                  return (
                    <Draggable key={l.id} draggableId={l.id} index={index}>
                      {(provided) => (
                        <li
                          className="draggable"
                          {...provided.draggableProps}
                          {...provided.dragHandleProps}
                          ref={provided.innerRef}
                        >
                          <LinkContainer
                            linkTitle={l.linkTitle}
                          />
                        </li>
                      )}
                    </Draggable>
                  );
                })}
              </ul>
            )}
          </Droppable>
        </DragDropContext>

这是允许我拖放同时设置的功能links新订单:

 const reorder = (links, startIndex, endIndex) => {
    const result = Array.from(links);
    const [removed] = result.splice(startIndex, 1);
    result.splice(endIndex, 0, removed);

    return result;
  };

  // handle drag end
  const handleOnDragEnd = (result) => {
    console.log(result);
    setLinks(reorder(links, result.source.index, result.destination.index));
  };

我如何更新我的 firebase 记录,以便LinkContainer映射时按最后顺序渲染links在页面重新加载时?

我是否必须在文档本身上创建索引并使用文档的位置更新该索引LinkContainer


根据您添加属性以将其用作索引的建议,我想分享以下观察结果:

例如,使用这种方法,您需要更新列表中的所有元素,以便在数据库上重新创建新订单,每次移动对象时都会执行此操作。

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

在最坏的情况下

(documents in collection) * (# of movements)

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

["1a","1c","2b","3x"]

但是在前端的动作之后,它看起来像这样

["1a","2b","3x","1c"]

前端的状态可以存储在单独集合中文档内的数组中,以便不修改原始对象并避免每次移动时重新更新所有元素,但这将继续受到数量的影响用户在前端执行的操作,并且您还需要根据集合上文档的创建或删除来更新数组。

您必须遵循数组顺序才能以所需的方式显示您的信息。

最后一种替代方案(也许效率较低)是每次发生移动时重写完整集合​​(使用前端快照),重写集合算作单个写入操作,但这可能会在并发操作中产生未来问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据拖放位置对 firestore 中的文档进行排序 的相关文章

  • 在AWS S3中部署react-redux应用程序

    我在堆栈溢出中遇到了很多类似的问题one https stackoverflow com questions 16267339 s3 static website hosting route all paths to index html
  • Relay 中的嵌套片段数据始终相同

    我是 Relay 新手 并且遇到了片段上嵌套数据的问题 当我在 graphiql 中进行测试时 以下查询返回正确的数据 因此我确信我的架构是正确的 viewer customers name billing address city 但是
  • 单击react.js 切换列表的背景颜色

    我正在尝试创建一个具有以下功能的列表 悬停时更改列表项的背景颜色 单击时更改列表项的背景颜色 在单击的元素之间切换背景颜色 即列表中只有一个元素可以具有 clicked 属性 我已经执行了 onhover 1 和 2 功能 但无法实现第三个
  • 未处理的拒绝:发送后无法设置标头

    我正在 Dialogflow 中创建一个聊天机器人 当我尝试将数据添加到数据库时 它抛出了 未处理的拒绝 错误 这是我的index js文件 use strict const functions require firebase funct
  • 新的 FUITableViewDataSource - 如何使用?雨燕3

    刚刚更新到较新的 FirebaseUI Pod 有些事情发生了变化 但其中最大的变化之一是 FUI 表视图的工作方式 我让它在旧版本上运行良好 但在下面遇到了困难 并且缺乏文档 示例 self dataSource FUITableView
  • 如何使用 React TransitionMotion willEnter()

    Using React Motion 的 TransitionMotion https github com chenglou react motion 我想要为 1 个或多个盒子进出设置动画 当一个盒子进入视图时 它的宽度和高度应该从 0
  • react-native-screens:compileDebugKotlin 错误

    失败 构建失败并出现异常 什么地方出了错 任务 react native screens compileDebugKotlin 执行失败 评估任务 react native screens compileDebugKotlin 的属性 fi
  • 使用 Azure AD B2C 进行 Firebase 身份验证

    我有一个用 xCode Swift 开发的本机 iOS 应用程序 它集成了Firebase 身份验证 https firebase google com docs auth 用于新用户注册和登录的SDK Firebase Auth 系统应链
  • 如何延迟 NavLink 的反应?

    Delay e gt e preventDefault setTimeout gt e unpreventDefault make this work 500 render
  • 无法从 Twin.macro 中的 Prop 获取值

    您可以在这里查看我正在尝试执行的操作的示例 https codesandbox io s vibrant leaf qj8vz https codesandbox io s vibrant leaf qj8vz 注意 这个特定的例子使用双宏
  • 将 ESLint 与 Airbnb 样式和选项卡结合使用 (React.js)

    我正在开发一个 React js 应用程序 并且正在尝试检查我的代码 我将 ESLint 与 Airbnb 风格一起使用 但出现以下错误 src Test jsx 4 2 error Unexpected tab character no
  • 使用默认值反应路由参数

    我正在使用 React 功能组件和 React Router v5 我正在使用 useParam 函数来获取参数 当参数不可用或未定义时 如何设置参数的默认值 我的路由器代码
  • Enzyme - 测试嵌套组件是否正确呈现

    我正在尝试测试当通过简单的布尔值更新状态时 在父组件中其子组件是否正确呈现 在父组件下面 class Parent extends Component render const isReady this state const props
  • 使用样式组件更改 SVG 描边的颜色

    我有一个 SVG 用作 img 标签 使用样式组件 我试图达到在悬停时更改描边颜色的程度 我导入了 SVG import BurgerOpenSvg from images burger open svg 我为它创建了一个样式组件 cons
  • 将应用转移到另一个 Firebase 帐户

    我的个人 Firebase 帐户下有一些应用程序用于测试 但现在需要将应用程序转移到客户的帐户以进行计费 这可能吗 Thanks 我最近将一个项目的所有权转移到另一个帐户 您所要做的就是 转到 Firebase 控制台 然后选择要转移的项目
  • Firebase Messaging FCM 在可配置的时间间隔内分发

    当您使用 FCM 向给定应用程序的所有设备发送推送时 这可能会导致许多用户同时打开他们的应用程序 从而导致大量服务器轮询 从而导致负载峰值 有没有一种方便的方法可以在给定的时间间隔内分发消息以进行计划推送 最后 我们找到了一种可能的方法 通
  • 从 Firestore 获取文档时,我是否也获取该文档内的集合?

    如果是的话 如何获得它 因为在进行文档引用时 您只能访问该文档的字段 而不能访问集合 从 Firestore 获取文档时 我是否也得到了 该文档内的集合 不 当获取文档时 您只会获取该文档的字段 正如本节中所解释的document http
  • 数据未刷新“DynamiteModule:未找到 com.google.firebase.auth 的本地模块描述符类”

    我已经使用 Firebase 很长时间了 到目前为止 除了以下场景之外 一切都很好 有时我注意到我的应用程序不再获取新数据 我正在用一个活跃的监听器监听变化 并且我确实有keepSynced set to true 发生这种情况时 我会在日
  • 如何将React JS状态保存到本地存储中

    我不知道如何将 React js 状态存储到本地存储中 import React Component from react import App css import auth createUserProfileDocument from
  • React Hooks 常量组件与功能组件

    我理解函数组件和类组件之间的区别 但是 const 组件和函数组件之间有什么区别 e g const Home gt return div Home div To function Home return div Home div 两者都可

随机推荐

  • 如何在 Vim 中正确扩展突出显示组?

    我想创建一个名为的突出显示组Italic完全像Normal但文本为斜体 目前 我的Normal突出显示 被设定为 ctermfg 251 ctermbg 234 guifg cccccc guibg 242424 我的问题是 正在添加ter
  • Python 3.4-定期插入空格[重复]

    这个问题在这里已经有答案了 我试图让 Python 允许我在字符串中定期插入一个空格 每 5 个字符 这是我的代码 str1 abcdefghijklmnopqrstuvwxyz list1 list2 count 3 space conv
  • 处理凌乱的日期

    我希望你没有认为我是在寻求感情方面的建议 有时 我必须向调查受访者提供指定事件发生时间的能力 结果是一个非常混乱的字符串 老实说我不知道 该怎么处理 超越手工重新编码 这是一个简短的样本 有数千个 c May2 12 noon 9 45 a
  • Python UDP套接字半随机接收失败

    我遇到了一些问题 我猜是代码问题 该应用程序用于 ping 一些定制的网络设备 以检查它们是否处于活动状态 它每 20 秒使用一个特殊的 UDP 数据包对它们执行 ping 操作 并期望得到响应 如果他们连续 3 次未能应答 ping 应用
  • C++ 两个阶乘之和等于 10 的阶乘找到两个值 x 和 y,其阶乘之和[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我陷入了一个简单的 C 问题 但这对我来说现在很困难 谁能帮我解决这个问题 我已经为这个问题编写了 C 代码 我知道代码无法作为问题的答案打
  • 如何在 matplotlib 中向水平条形图添加标签?

    如何在 matplotlib 中向水平条形图添加标签 大家好 我是 matplotlib 和 python 新手 我想再次问这个问题以获得一些帮助 看看是否有比我找到的当前解决方案更简单的方法来为每个条形表示的计数添加标签 这是我写的代码
  • 如何选择具有特定属性的所有元素?使用 TinyXPath

    用于选择具有属性 A 的所有元素的 XPath 表达式是什么 const char xpath A 此 XPath 选择具有 A 属性的所有元素 A
  • 如何通过PHP和mysql构建无限级菜单

    好吧 为了构建我的菜单 我使用类似数据库的结构 如下所示 2 Services 0 3 Photo Gallery 0 4 Home 0 5 Feedback 0 6 FAQs 0 7 News Events 0 8 Testimonial
  • DotNetOpenAuth 谷歌 OAuth2

    在最后一个DotNetOpenAuth包中 GoogleClient扩展了OpenIdClient 有人知道我在哪里可以找到扩展DotNetOpenAuth OAuth2Client的google Oauth2的实现 From OAuth2
  • 如何从库中获取曲目文件名

    我正在尝试读取所有播放列表以及每个播放列表中的音乐文件 这是我的 C 代码 iTunesAppClass iTunesAppClass new iTunesAppClass IITSourceCollection sources iTune
  • 如何获取当前工作cs文件的文件名和当前类的名称[重复]

    这个问题在这里已经有答案了 假设我正在处理 Welcome cs 文件 在构造函数中我想打印 欢迎 但是 如果我将相同的代码放入 HelloWorld cs 它应该打印 HellowWorld 我怎么做 你可以试试 string thisF
  • 具有身份服务器 4 的 asp.net Web 表单客户端

    我有一个 asp net 解决方案 其中包括 1 asp net identity server rc 3 2 asp net Core web api 3 asp net webform not in asp net core clien
  • Magento Checkout:无需迭代即可获取小计价值

    有什么办法可以直接得到小计吗 根据这个网站 http sleekd com general how to set up tax rules for sales within canada in magento 您可以通过以下方式获取小计 t
  • 子域和本地安装的 Rails 应用程序

    我不明白我忽略了什么 也许它是显而易见的或缺乏理解 我正在使用的应用程序使用托管服务器上正常工作的子域 我认为本地安装会引发一些有关路由的问题 因此我阅读了有关更改 etc hosts 和使用 Ghost gem 的内容 两者似乎都工作正常
  • 即使在 CallBase = true/false 之后,原始方法仍然会在 Moq 中被调用

    这是我的code public class Bar public class Foo public string Name get set public Bar TheBar get set public class Dependency
  • 为什么对依赖单例的系统进行单元测试很困难?

    我读过支持和反对使用单例模式的案例 一种常见的反对案例描述了单例单元测试的困难 但我不清楚这是为什么 如果单元测试是构建的一部分 您难道不能只引用单例并在需要时使用它吗 我从java的角度思考 但我想这不重要 关于此的一篇很棒的文章是单身人
  • C 和 C++ 中的静态变量

    声明为的变量之间有什么区别吗static在 C 和 C 之间的任何函数之外 我读到了static意味着文件范围和变量在文件之外不可访问 我还读到 在 C 中 全局变量是static 那么这是否意味着C中的全局变量不能在另一个文件中访问 不
  • 使用 foreach 循环来初始化变量

    我构建了一个空关联数组 其键名引用提交的帖子数据 我可以很好地捕获后数据 但在尝试实例化名称与数组键匹配的变量时遇到了麻烦 例如 insArray array rUsername gt rPass gt rQuestion gt rAnsw
  • 永久修改启动 Activity 的 Intent

    我想发送一个意图来启动一个活动 我希望能够修改该意图 然后 当活动被销毁并重新创建时 我希望当我调用时这些修改仍然存在getIntent 目前 只要 Activity 没有被销毁 修改意图就可以正常工作 如果有 那么当重新创建 Activi
  • 根据拖放位置对 firestore 中的文档进行排序

    我的目标是呈现我的LinkContainer组件 以便它们位于我的拖放上下文中