如果您在组件的生命周期内将组件从受控转换为不受控制(反之亦然),React会发出警告。
除了令人困惑的原因之外,还有其他不建议这样做的技术原因吗?
最佳答案
根据我的经验,我认为主要原因是为了防止混乱和意外行为(因此避免错误)。
此警告来自ReactJS15。在先前的主要版本-React 14(技术上是React 0.14)中,没有这样的警告。
因此,这是一个流行的误解,说明可能存在混淆。我forked your jsfiddle并进行了以下更改:
切换到ReactJS到14(技术上是React 0.14)
我为value
(空字符串)和defaultValue
('hello')添加了值。
不再有控制台警告。这是一个误解:人们可能会认为默认(初始)值将是“ hello”,然后->因为Input是受控的->所有将来的值更改都将存储在组件状态内。
但是事实并非如此。默认显示的值为空字符串,而不是“ hello”。相信我,对于那些难以掌握受控输入背后的想法的开发人员,这会引起混乱。我自己经历过!
因此,切换回React 15,您会得到一个很好的警告:
输入元素不应从不受控制切换为受控制(反之亦然)。确定在组件的使用寿命期间使用受控或不受控制的输入元素。
它并没有告诉您完整的原因,但至少可以指导您在哪里阅读以及如何解决它。比根本没有警告要好得多,对吗? :-)