javascript - 为什么不建议将 React 组件从受控切换为不受控?

标签 javascript reactjs

如果您在组件的生命周期内将组件从受控状态转换为不受控状态(反之亦然),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/

相关文章:

javascript - React Redux Router 不路由

reactjs - 如何使用 ESLint 捕获 React 中未声明的变量?

javascript - 使用 React-PDF 放大/缩小

javascript - Chrome 扩展 : contentscript not working on local page?

javascript - 对象数组 - 选择数组的子集,其中 Obj.Prop IN 值数组

javascript - 组合一些数组项

javascript - 展平嵌套的 ajax 请求

reactjs - React Router v4 中的 hashHistory 在哪里?

reactjs - 从 react 状态中删除 key 的正确方法

javascript - 是否有任何直接方法可以返回对象数组中数组长度的总和?