【Day11】表单:非受控元件 Uncontrolled Component

受控 vs. 非受控元件

  • 受控元件:value 值由 React component 使用 state 负责处理,随时监听内容来改变值
  • 非受控元件:value 值由原始 DOM 或使用 ref 以 HTML 传统表单方式处理,不受 component 的 state 控制

大多数的情况下,React 推荐使用受控元件(controlled component)来实作表单


撰写非受控元件

如果要写一个 uncontrolled component,
可以使用 ref 从 DOM 取得表单的资料。

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.handleSubmit = this.handleSubmit.bind(this);
    this.input = React.createRef();
  }

  handleSubmit(event) {
    alert('A name was submitted: ' + this.input.current.value);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" ref={this.input} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

预设值

在 React 的 render 生命周期里,
表单上的 value attribute 会覆写掉 DOM 的值。

由於在 component mount 後改变 defaultValue 属性,
不会造成任何在 DOM 里面的值更新。
要处理这种情况,
可以指定 defaultValue attribute 而非 value。

render() {
  return (
    <form onSubmit={this.handleSubmit}>
      <label>
        Name:
        <input
          defaultValue="Bob"
          type="text"
          ref={this.input} />
      </label>
      <input type="submit" value="Submit" />
    </form>
  );
}

预设属性名称

  • defaultValue:text / select / textarea input
  • defaultChecked:checkbox / radio input

档案 input 标签

<input type="file"> 让使用者,
能够从他们的装置选择上传
一个或多个档案。

在 React 里,
<input type="file" /> 永远都是
uncontrolled component。

因为它的值是唯读,
只能被使用者设定,
而无法由程序码来设定。


参考资料


<<:  第 12 天 范本变数加范本输入变数|template variables、template input variables

>>:  Day 12 Kafka 超简单安装!!

Day4 安装Vue

Vue的安装方式有很多种像我这次是使用CND的方式来使用Vue 首先呢我们可以先到Vue的网站 可以...

我流理解---JavaScript ES6---2

继续尝试纪录~ 尽量在本周看完Vue的教学,并且周末前完成Vue的作业吧~ 下周就能更积极的找工作来...

[2021铁人赛 Day05] General Skills 02

引言 昨天完成了最基本的一题,学了一些基本操作。 cat, wget 等,都是必备的工具,一定要学...

[Day3][笔记] React.js 常用 的 ES6 语法(2)

前言 延续昨天内容今天继续介绍常用 ES6 语法。 展开其余 展开运算符有几个用途 阵列 展开成个别...

Day23 - Day17 改为轻前端范例

Case01 与 Day17 范例的差异,除了从 Razor Tag Helper 改为 轻前端外,...