如果您在组件的生命周期内将组件从受控转换为不受控制(反之亦然),React会发出警告。

除了令人困惑的原因之外,还有其他不建议这样做的技术原因吗?

最佳答案

根据我的经验,我认为主要原因是为了防止混乱和意外行为(因此避免错误)。

此警告来自ReactJS15。在先前的主要版本-React 14(技术上是React 0.14)中,没有这样的警告。

因此,这是一个流行的误解,说明可能存在混淆。我forked your jsfiddle并进行了以下更改:


切换到ReactJS到14(技术上是React 0.14)
我为value(空字符串)和defaultValue('hello')添加了值。


不再有控制台警告。这是一个误解:人们可能会认为默认(初始)值将是“ hello”,然后->因为Input是受控的->所有将来的值更改都将存储在组件状态内。

但是事实并非如此。默认显示的值为空字符串,而不是“ hello”。相信我,对于那些难以掌握受控输入背后的想法的开发人员,这会引起混乱。我自己经历过!

因此,切换回React 15,您会得到一个很好的警告:


  输入元素不应从不受控制切换为受控制(反之亦然)。确定在组件的使用寿命期间使用受控或不受控制的输入元素。


它并没有告诉您完整的原因,但至少可以指导您在哪里阅读以及如何解决它。比根本没有警告要好得多,对吗? :-)

07-25 20:49