在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 表單組件
顯示數(shù)據(jù)
組件的引用
Controlled Input 值為 null 的情況
Reconciliation
子 props 的類型
組件的詳細(xì)說明和生命周期
傳遞 Props
特殊的非 DOM 屬性
組件 API
PureRenderMixin
雙向綁定輔助工具
瀏覽器中的工作原理
深入 JSX
表單組件
Dangerously Set innerHTML
入門
JSX 中的 If-Else
克隆組件
教程
更多的關(guān)于Refs
JSX 的 false 處理
高級性能
Mounting 后 componentWillReceiveProps 未被觸發(fā)
簡介
測試工具集
JSX 陷阱
工具集成(ToolingIntegration)
公開組件功能
通過 AJAX 加載初始數(shù)據(jù)
事件系統(tǒng)
可復(fù)用組件
this.props.children undefined
不可變數(shù)據(jù)的輔助工具(Immutability Helpers)
動態(tài)交互式用戶界面
組件的 DOM 事件監(jiān)聽
復(fù)合組件
動畫
插件
JSX 展開屬性
行內(nèi)樣式
性能分析工具
類名操作
與其他類庫并行使用 React
鍵控的片段
標(biāo)簽和屬性支持
組件間的通信
React (虛擬)DOM 術(shù)語
JSX 根節(jié)點(diǎn)的最大數(shù)量
在樣式props中快速制定像素值
頂層 API
深入理解 React
自閉合標(biāo)簽
為什么使用 React?
getInitialState 里的 Props 是一個(gè)反模式
與 DOM 的差異

表單組件

諸如 <input>、<textarea>、<option> 這樣的表單組件不同于其他組件,因?yàn)樗麄兛梢酝ㄟ^用戶交互發(fā)生變化。這些組件提供的界面使響應(yīng)用戶交互的表單數(shù)據(jù)處理更加容易。

交互屬性

表單組件支持幾個(gè)受用戶交互影響的屬性:

  • value,用于 <input>、<textarea> 組件。
  • checked,用于類型為 checkbox 或者 radio<input> 組件。
  • selected,用于 <option> 組件。

在 HTML 中,<textarea> 的值通過子節(jié)點(diǎn)設(shè)置;在 React 中則應(yīng)該使用 value 代替。

表單組件可以通過 onChange 回調(diào)函數(shù)來監(jiān)聽組件變化。當(dāng)用戶做出以下交互時(shí),onChange 執(zhí)行并通過瀏覽器做出響應(yīng):

  • <input><textarea>value 發(fā)生變化時(shí)。
  • <input>checked 狀態(tài)改變時(shí)。
  • <option>selected 狀態(tài)改變時(shí)。

和所有 DOM 事件一樣,所有的 HTML 原生組件都支持 onChange 屬性,而且可以用來監(jiān)聽冒泡的 change 事件。

受限組件

設(shè)置了 value<input> 是一個(gè)受限組件。 對于受限的 <input>,渲染出來的 HTML 元素始終保持 value 屬性的值。例如:

  render: function() {
    return <input type="text" value="Hello!" />;
  }

上面的代碼將渲染出一個(gè)值為 Hello! 的 input 元素。用戶在渲染出來的元素里輸入任何值都不起作用,因?yàn)?React 已經(jīng)賦值為 Hello!。如果想響應(yīng)更新用戶輸入的值,就得使用 onChange 事件:

  getInitialState: function() {
    return {value: 'Hello!'};
  },
  handleChange: function(event) {
    this.setState({value: event.target.value});
  },
  render: function() {
    var value = this.state.value;
    return <input type="text" value={value} onChange={this.handleChange} />;
  }

上面的代碼中,React 將用戶輸入的值更新到 <input> 組件的 value 屬性。這樣實(shí)現(xiàn)響應(yīng)或者驗(yàn)證用戶輸入的界面就很容易了。例如:

  handleChange: function(event) {
    this.setState({value: event.target.value.substr(0, 140)});
  }

上面的代碼接受用戶輸入,并截取前 140 個(gè)字符。

不受限組件

沒有設(shè)置 value(或者設(shè)為 null) 的 <input> 組件是一個(gè)不受限組件。對于不受限的 <input> 組件,渲染出來的元素直接反應(yīng)用戶輸入。例如:

  render: function() {
    return <input type="text" />;
  }

上面的代碼將渲染出一個(gè)空值的輸入框,用戶輸入將立即反應(yīng)到元素上。和受限元素一樣,使用 onChange 事件可以監(jiān)聽值的變化。

如果想給組件設(shè)置一個(gè)非空的初始值,可以使用 defaultValue 屬性。例如:

  render: function() {
    return <input type="text" defaultValue="Hello!" />;
  }

上面的代碼渲染出來的元素和受限組件一樣有一個(gè)初始值,但這個(gè)值用戶可以改變并會反應(yīng)到界面上。

同樣地, 類型為 radio、checkbox<input> 支持 defaultChecked 屬性, <select> 支持 defaultValue 屬性。

  render: function() {
      return (
          <div>
            <input type="radio" name="opt" defaultChecked /> Option 1
            <input type="radio" name="opt" /> Option 2
            <select defaultValue="C">
              <option value="A">Apple</option>
              <option value="B">Banana</option>
              <option value="C">Cranberry</option>
            </select>
          </div>
      );
    }

高級主題

為什么使用受限組件?

在 React 中使用諸如 <input> 的表單組件時(shí),遇到了一個(gè)在傳統(tǒng) HTML 中沒有的挑戰(zhàn)。

比如下面的代碼:

  <input type="text" name="title" value="Untitled" />

在 HTML 中將渲染初始值為 Untitled 的輸入框。用戶改變輸入框的值時(shí),節(jié)點(diǎn)的 value 屬性(property)將隨之變化,但是 node.getAttribute('value') 還是會返回初始設(shè)置的值 Untitled.

與 HTML 不同,React 組件必須在任何時(shí)間點(diǎn)描繪視圖的狀態(tài),而不僅僅是在初始化時(shí)。比如在 React 中:

  render: function() {
    return <input type="text" name="title" value="Untitled" />;
  }

該方法在任何時(shí)間點(diǎn)渲染組件以后,輸入框的值就應(yīng)該始終Untitled。

為什么 <textarea> 使用 value 屬性?

在 HTML 中, <textarea> 的值通常使用子節(jié)點(diǎn)設(shè)置:

  <!-- 反例:在 React 中不要這樣使用! -->
  <textarea name="description">This is the description.</textarea>

對 HTML 而言,讓開發(fā)者設(shè)置多行的值很容易。但是,React 是 JavaScript,沒有字符限制,可以使用 \n 實(shí)現(xiàn)換行。簡言之,React 已經(jīng)有 value、defaultValue 屬性,</textarea> 組件的子節(jié)點(diǎn)扮演什么角色就有點(diǎn)模棱兩可了?;诖?, 設(shè)置 <textarea> 值時(shí)不應(yīng)該使用子節(jié)點(diǎn):

  <textarea name="description" value="This is a description." />

如果*非要**使用子節(jié)點(diǎn),效果和使用 defaultValue 一樣。

為什么 <select> 使用 value 屬性

HTML 中 <select> 通常使用 <option>selected 屬性設(shè)置選中狀態(tài);React 為了更方面的控制組件,采用以下方式代替:

  <select value="B">
    <option value="A">Apple</option>
    <option value="B">Banana</option>
    <option value="C">Cranberry</option>
  </select>

如果是不受限組件,則使用 defaultValue。

注意:

value 屬性傳遞一個(gè)數(shù)組,可以選中多個(gè)選項(xiàng):<select multiple={true} value={['B', 'C']}>。