在我的React / Redux应用程序中,我有一个文本输入,其默认值通过Ajax调用检索。用户可以编辑输入中的默认值,然后通过单击“提交”链接提交更新的值。我正在努力使用不受控制或受控制的输入。
我可以在这做什么建议?
答案 0 :(得分:3)
正如文档所说,defaultValue
仅在初始渲染时有用。因此,如果要使用defaultValue
,则必须延迟该特定组件的呈现,直到加载数据为止。考虑使用加载gif(或类似的东西)代替AJAX调用的表单。
我不认为第二种方式 - 使用value
并使用onChange
进行更新 - 与您说的一样糟糕;一般来说我是如何写我的表格的。然而,这里真正的问题是再次延迟加载。加载初始值时,用户可能已经填写了该输入,只是看到它被接收到的AJAX值覆盖。不好玩。
在我看来,最好的方法就是不使用AJAX。将您的初始数据作为全局变量附加到网页本身。这可能听起来像一个反模式,但你只读过一次全局,它可以节省你的AJAX请求的成本。在Redux中,有一种方便的方式,我已经记录了here和here。
答案 1 :(得分:0)
只是为了补充大卫的答案。
有时,进行AJAX调用以加载默认值是有意义的。 对于前者你可以调用一些服务来支持多语言,在数据库中用默认值创建一个元素等等。
我会使用value-onChange方法并阻止用户在加载之前编辑该值:
通过禁用输入直到AJAX调用返回。只需将disabled属性绑定到显示默认值已加载的某个prop。
在AJAX调用返回之前,不渲染输入。当您从服务器获取默认值时,您可以修改状态,以便触发重新渲染。