javascript - 重置 React 中控件的默认值

标签 javascript reactjs

我有一个 React 应用程序,它由一个主“ Canvas ”组件(渲染第 3 方 SVG)和一个工具栏组件组成,该组件用于控制 Canvas 上的缩放和各种其他操作。用户可以使用下拉菜单更改 Canvas 的内容,当发生这种情况时,控件(缩放等)应重置为其默认值。

主应用容器、 Canvas 和工具栏都是类组件,具有生命周期管理。工具栏上的控件都是无状态的功能组件。最初这是一个 Backbone 应用程序,更改 Canvas 意味着销毁包含 Canvas 和控件的 View 并创建一个具有默认值的新 View 。然而,我很难用 React 轻松实现同样的目标。我的缩放控件是一个简单的功能组件,它呈现一个带有各种缩放百分比选项的选择控件:

function zoomPcntControl(props) {
  const zoomLevels = [10, 25, 50, 75, 100, 125, 150, 200, 400, 800, 1600, 2400, 3200];
  const options = zoomLevels.map((level, key) => {
    return (
      <option key={key}> {level+"%"} </option>
    );
  });
  render() {
    return (
      <div>
        <select id="zoom-list" defaultValue="100%" autoComplete="off" onChange={props.handleZoomPcnt}>
          {options}
        </select>
      </div>
    )
  }
}

我要确保的是,每次重绘canvas组件时,控件的显示值都会重置为默认值100。如果不求助于 jQuery,我怎样才能实现这一目标呢?我知道key技巧,但这似乎是一个粗略的解决方案 - 我尝试过,视觉结果也不令人满意。

默认值不能真正建模为状态,因为它是应用程序的固定值。无论如何,缩放控件都是一个功能组件,没有自己的状态。其“状态”的唯一变化是用户交互的结果。

最佳答案

在 React 中有两种方法可以做到这一点。

使 Zoom 组件成为受控组件。将缩放值作为 props 传递,并使用 value 而不是 defaultValue。

<select value={props.value} onChange={props.handleZoomPct} />

在 Zoom 组件上使用 ref。当需要重置defaultValue时,使用ref重置该值。

reset() {
  this.selectRef.current.value = '100%';
}

关于javascript - 重置 React 中控件的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52350523/

相关文章:

node.js - ObjectId 转换为 api 中的字符串,nodejs 到 reactjs

javascript - 如何使用 React 和 ant 设计包装 2 个或更多菜单项以在一种情况下使用它们?

javascript - 当检测到静音(JS)时,如何提取前面的音频(来自麦克风)作为缓冲区?

javascript - 无法使用 nodejs 获取、写入和读取字体文件

javascript - Canvas :没有中断的曲线

javascript - browserify 入门 : import local files?

javascript - 基于 json 数据响应动态路由

reactjs - React js给出错误传播运算符

javascript - 将方法作为 Prop 从嵌入式组件传递给父级调用

javascript - 如何使用 sinon.js 在 Node.js 中 stub 全局依赖项的新实例方法