【React】之受控组件和非受控组件
生活随笔
收集整理的這篇文章主要介紹了
【React】之受控组件和非受控组件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
React中的組件根據是否受React控制可分為受控的和非受控的。
一、受控組件
受控組件更新state的流程
1、 可以通過初始state中設置表單的默認值
2、每當表單的值發生變化時,調用onChange事件處理器
3、事件處理器通過事件對象event拿到改變后的狀態,并更新組件的state
4、通過setState方法更新state,就會觸發視圖的重新渲染,完成表單組件的更新
二、非受控組件
在虛擬DOM節點上聲明一個ref屬性,并且將創建好的引用賦值給這個ref屬性
react會自動將輸入框中輸入的值放在實例的ref屬性上
import React, { Component } from 'react' export default class Feishou extends Component{ constructor(){super();// 在構造函數中創建一個引用this.myref=React.createRef(); } handleSubmit = (e) => {// 阻止原生默認事件的觸發(刷新)e.preventDefault();console.log(this.myref.current.value); } render() {return (<form onSubmit={this.handleSubmit}>{/* 自動將輸入框中輸入的值放在實例的myref屬性上 */}<inputtype="text"ref={this.myref}/><button>提交</button> {/* 手動提交 */}</form>) } }?非受控組件在底層實現時是在其內部維護了自己的狀態state,這樣表現出用戶輸入任何值都能反應到元素上。
三、對比受控組件和非受控組件的輸入流程:
- 非受控組件: 用戶輸入A => input 中顯示A
- 受控組件: 用戶輸入A => 觸發onChange事件 => handleChange 中設置 state.name = “A” => 渲染input使他的value變成A
正式因為這樣,使得 React 的 state 成為唯一數據源。對于受控組件來說,輸入的值始終由 React 的 state 驅動。
所以官方強烈推薦使用受控組件,因為它能更好的控制組件的生命流程。
注意:
- 組件的value屬性與React中的狀態綁定
- 組件內聲明了onChange事件處理value的變化
總結
以上是生活随笔為你收集整理的【React】之受控组件和非受控组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开心一刻:邪恶的小明
- 下一篇: 网站系统维护通知美化页面