relayjs - 如何在中继现代(实验)中共享相同的表单来创建和更新对象?
问题描述
我是中继新手,我正在尝试在并发模式下使用中继现代实验。我已经能够使用 Suspense 和 ErrorBoundary 加载节点、边等。我现在正在研究一种用于创建和更新对象的表单。
我不知道如何在创建和编辑案例中使用相同的表单,因为我无法在创建案例中加载片段——表单字段的初始值设置为默认值。在创建案例中,我没有任何东西可以传递给 useFragment 。
如何创建符合表单所需片段定义的初始值?也许有一种我不知道的模式。我肯定错过了什么。我不想复制表单 UI 组件。
解决方案
我认为在 React 中使用 Relay 存储来驱动表单没有意义,因为它真的很复杂:例如,在创建的情况下,您需要将表单中的数据写入一些您使用的临时 ID识别存储中的节点,然后告诉片段容器读取该节点上的字段。然后,在创建或编辑情况下,在表单输入更改事件处理程序中,您将使用commitLocalUpdate()
API 更新该节点。这变得非常复杂。
编辑表单的一个更简单的模式,无论您是创建一个新节点还是编辑现有节点,都是在您的 React 组件 ( useState()
) 中使用状态驱动表单,然后在您使用 Relay 时使用 Relay完成编辑。在编辑现有节点的情况下,您最终会从 Relay 存储“分叉”状态,使用表单对其进行修改,然后将其持久化。然后,当突变完成时,您可以通过updater
函数或突变回复中的字段更新存储。
推荐阅读
- serialization - Avro Schema 用于具有随机名称的非结构化数据
- javascript - dangerouslySetInnerHTML 是否会阻止设置无效的 HTML?
- python - 如何从一个函数访问多个值,而只调用一次函数?
- html - 如何在 Safari 中对齐背景图像?
- python - pip 跳过升级,不满足时表示要求已经满足
- html - 访问 ngFor 中的不同对象
- ansible - 使用 jinja2 模板解析 ansible 中的输出(将字符串列表映射到字符串列表)
- javascript - 通过 javascript 调整 SVG viewBox 的行为
- sql - 没有 CTE 的层次结构 - 获取直接子级
- if-statement - 如果在 Haskell 中有多重条件吗?