如果您在组件的生命周期内将组件从受控状态转换为不受控状态(反之亦然),React 会发出警告。
除了这令人困惑之外,还有其他不推荐的技术原因吗?
最佳答案
根据我的经验,我认为主要原因是为了防止混淆和意外行为(因此 - 错误)。 p>
此警告自 ReactJS 15 以来出现。在之前的主要版本 - React 14(技术上,React 0.14)中 - 没有此类警告。
因此,这里有一个流行的误解说明了可能的混淆。我 forked your jsfiddle并进行了以下更改:
- 切换到 ReactJS 到 14(技术上,React 0.14)
- 我为
value
(空字符串)和defaultValue
('hello')添加了值。
不再有控制台警告。这是一种误解:人们可能会认为默认(初始)值将是“hello”,然后 -> 因为输入是受控制的 -> 所有 future 的值更改都将存储在组件状态中。
但事实并非如此。默认显示值是一个空字符串,而不是“你好”。相信我,对于难以理解受控输入背后的想法的开发人员来说,这会造成混淆。我亲身经历过!
因此,切换回 React 15,您会收到一个不错的小警告:
Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.
它没有告诉您完整的故事原因,但至少它指导您在哪里阅读以及如何解决它。总比没有警告好得多,对吧? :-)
关于javascript - 为什么不建议将 React 组件从受控切换为不受控?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43026843/