如何处理同构渲染表单的早期输入

如何处理同构渲染表单的早期输入,第1张

概述我有一个React应用程序,其中包含一个表单,该表单在服务器端呈现,预先填充了用户正在进行的工作.问题是如果用户在应用加载之前在表单中编辑了一个值,那么应用程序就不会意识到这一变化.当用户保存时,服务器呈现的未更改数据将被重新保存,并且用户的新数据将被删除,尽管它仍显示在表单中.简而言之,React和它在初始加载时替换的标记中的输入值之间似乎存在脱节. 我想我可以在每个输入上放置refs并将它们的 我有一个React应用程序,其中包含一个表单,该表单在服务器端呈现,预先填充了用户正在进行的工作.问题是如果用户在应用加载之前在表单中编辑了一个值,那么应用程序就不会意识到这一变化.当用户保存时,服务器呈现的未更改数据将被重新保存,并且用户的新数据将被删除,尽管它仍显示在表单中.简而言之,React和它在初始加载时替换的标记中的输入值之间似乎存在脱节.

我想我可以在每个输入上放置refs并将它们的值复制到componentDIDMount上的应用程序状态,但必须有更好的方法.还有其他人解决了这个问题吗?

更新

我现在认为解决这个问题的最佳方法是在创建校验和时让React考虑输入值. GH问题:https://github.com/facebook/react/issues/4293

解决方法

I suppose I Could put refs on every input and copy their values into the application state on componentDIDMount,but there has got to be a better way. Has anyone else solved this problem?

浏览器自动填充字段或在刷新时记住以前的值也可能导致实际上同样的问题 – 您的应用程序的数据视图与用户的不同.

我过去的蛮力解决方案是从提交的输入中提取完整的表单状态并重新运行valIDaton,然后再继续提交.

使用componentDIDMount听起来像一个更优雅的解决方案,因为它避免了用户输入无效数据,并允许他们在收到任何警告之前尝试提交它.但是,您不需要为每个输入添加引用;只需在< form>中添加一个并使用其.elements collection来提取所有数据.

建议的解决方案:

>在componentDIDMount()中,从其.elements中提取表单的数据(为此,我从表单库中提取了get-form-data)
>根据应用程序状态中的内容检查每个字段的当前值.
>如果字段的当前值不同,请将其视为通过事件到达的新用户输入 – 将其更新为状态并重新运行任何关联的验证例程.

然后从componentDIDMount()开始,您的应用和用户将始终在同一页面上(字面意思).

总结

以上是内存溢出为你收集整理的如何处理同构渲染表单的早期输入全部内容,希望文章能够帮你解决如何处理同构渲染表单的早期输入所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1134150.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存