javascript - ReactJS:即使在重新渲染组件后复​​选框状态仍然存在

标签 javascript reactjs checkbox

我创建了一个 JSfiddle

在这个 fiddle 中,最初根据传递给组件的 props 呈现一个复选框列表。 单击 Re-render 按钮时,同一组件将使用一组不同的 props 进行渲染。

现在,请按照以下步骤-

  1. 加载 jsfiddle
  2. 选中任何一个复选框(假设我选中了第二个和第三个复选框)
  3. 点击重新渲染按钮

即使在使用新的 props 渲染组件后,您选中的复选框的状态仍保持不变(第 2 个和第 3 个仍处于选中状态)

为什么会这样? 我如何使用新的 Prop 集重新渲染组件,以便复选框的状态不会持续存在。

最佳答案

因为 React 的 diff algorithm 很聪明。重新渲染新组件的条件是:

  • 组件有不同的 key (不同的 key )
  • 或者它实际上是一个不同的 HTML 元素(不同的节点类型)

这是一个工作示例:http://jsfiddle.net/lustoykov/ufLyy3vh/

问题是 - 重新呈现您的 input 元素的条件都不满足,所以 React 真的重用了旧的 input。我所做的是在每次重新渲染时为每个 input 元素生成一个新的 key。 React 假设这是一个新元素,因为 key 发生了变化并且 input 被重新渲染为正确的 value


为了确保生成不同的 key ,Math.random() 是必需的,就像:嘿,React,这个元素已经改变 - 请重新渲染它。

但是,我会反对这种使用不同键的方法,因为它违背了 React 的理念。如果你每次都重新渲染相同的元素,你为什么要使用 React?这就是 React 的核心——当组件相同时不重新渲染。 相反,您应该使用 onChange 处理程序仅更新输入的值,而无需显式重新呈现整个输入组件

看看如何使用 React forms .

关于javascript - ReactJS:即使在重新渲染组件后复​​选框状态仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39392493/

相关文章:

javascript - Mongodb insertOne改变数据?

javascript - 查找是否在父 div 中选中了所有复选框

css - 无法在模态对话框中选择复选框

javascript - 复选框第一次不反射(reflect)其选中值

javascript - 使用 ember 添加 Dropbox 选择器

javascript - 实例未被垃圾回收

javascript - 在 Javascript 中使用新数组创建二维数组

reactjs - Electron和React的语法错误: unexpected token

node.js - 如何将 Next.js 正确配置为前端,将 Express 应用程序配置为后端?

javascript - redux-persist - 何时持久化 reducer ?