最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React受控組件與非受控組件深入講解

 更新時間:2022年12月26日 09:05:38   作者:落雪小軒韓  
具體來說這是一種react非受控組件,其狀態(tài)是在input的react內部控制,不受調用者控制??梢允褂檬芸亟M件來實現。下面就說說這個React中的受控組件與非受控組件的相關知識,感興趣的朋友一起看看吧

一、非受控組件

表單中輸入類DOM的值現用現取

<script type="text/babel">
	//創(chuàng)建組件
	class Login extends React.Component{
		handleSubmit = (event)=>{
			event.preventDefault() //阻止表單提交
			const {username,password} = this
			alert(`你輸入的用戶名是:${username.value},你輸入的密碼是:${password.value}`)
		}
		render(){
			return(
				<form onSubmit={this.handleSubmit}>
					用戶名:<input ref={c => this.username = c} type="text" name="username"/>
					密碼:<input ref={c => this.password = c} type="password" name="password"/>
					<button>登錄</button>
				</form>
			)
		}
	}
	//渲染組件
	ReactDOM.render(<Login/>,document.getElementById('test'))
</script>

二、受控組件

表單中輸入類DOM的值,隨著輸入,能把輸入的值維護到狀態(tài)state中,需要用的時候再從狀態(tài)中取出來。建議寫受控組件,可以減少ref的使用

<script type="text/babel">
	//創(chuàng)建組件
	class Login extends React.Component{
		//初始化狀態(tài)
		state = {
			username:'', //用戶名
			password:'' //密碼
		}
		//保存用戶名到狀態(tài)中
		saveUsername = (event)=>{
			this.setState({username:event.target.value})
		}
		//保存密碼到狀態(tài)中
		savePassword = (event)=>{
			this.setState({password:event.target.value})
		}
		//表單提交的回調
		handleSubmit = (event)=>{
			event.preventDefault() //阻止表單提交
			const {username,password} = this.state
			alert(`你輸入的用戶名是:${username},你輸入的密碼是:${password}`)
		}
		render(){
			return(
				<form onSubmit={this.handleSubmit}>
					用戶名:<input onChange={this.saveUsername} type="text" name="username"/>
					密碼:<input onChange={this.savePassword} type="password" name="password"/>
					<button>登錄</button>
				</form>
			)
		}
	}
	//渲染組件
	ReactDOM.render(<Login/>,document.getElementById('test'))
</script>

三、高階函數(函數柯里化)實現

1、定義

(1)高階函數

如果一個函數符合下面2個規(guī)范中的任何一個,那該函數就是高階函數。

1.若A函數,接收的參數是一個函數,那么A就可以稱之為高階函數。

2.若A函數,調用的返回值依然是一個函數,那么A就可以稱之為高階函數。

常見的高階函數有:Promise、setTimeout、arr.map()等等

(2)函數的柯里化

通過函數調用繼續(xù)返回函數的方式,實現多次接收參數最后統(tǒng)一處理的函數編碼形式。

function sum(a){
	return(b)=>{
		return (c)=>{
			return a+b+c
		}
	}
}

2、實現

<script type="text/babel">
	class Login extends React.Component{
		state = {
			username:'', //用戶名
			password:'' //密碼
		}
		//保存表單數據到狀態(tài)中
		saveFormData = (dataType)=>{
			return (event)=>{
				this.setState({[dataType]:event.target.value})
			}
		}
		//表單提交的回調
		handleSubmit = (event)=>{
			event.preventDefault() //阻止表單提交
			const {username,password} = this.state
			alert(`你輸入的用戶名是:${username},你輸入的密碼是:${password}`)
		}
		render(){
			return(
				<form onSubmit={this.handleSubmit}>
					用戶名:<input onChange={this.saveFormData('username')} type="text" name="username"/>
					密碼:<input onChange={this.saveFormData('password')} type="password" name="password"/>
					<button>登錄</button>
				</form>
			)
		}
	}
	ReactDOM.render(<Login/>,document.getElementById('test'))
</script>

onChange綁定的必須是一個函數,this.saveFormData()調用saveFormData 函數的返回值是一個函數

四、不用函數柯里化的實現

<script type="text/babel">
	class Login extends React.Component{
		state = {
			username:'', //用戶名
			password:'' //密碼
		}
		//保存表單數據到狀態(tài)中
		saveFormData = (dataType,event)=>{
			this.setState({[dataType]:event.target.value})
		}
		//表單提交的回調
		handleSubmit = (event)=>{
			event.preventDefault() //阻止表單提交
			const {username,password} = this.state
			alert(`你輸入的用戶名是:${username},你輸入的密碼是:${password}`)
		}
		render(){
			return(
				<form onSubmit={this.handleSubmit}>
					用戶名:<input onChange={event => this.saveFormData('username',event) } type="text" name="username"/>
					密碼:<input onChange={event => this.saveFormData('password',event) } type="password" name="password"/>
					<button>登錄</button>
				</form>
			)
		}
	}
	//渲染組件
	ReactDOM.render(<Login/>,document.getElementById('test'))
</script>

this.saveFormData()調用saveFormData 函數返回一個值然后放在一個函數里面

到此這篇關于React受控組件與非受控組件深入講解的文章就介紹到這了,更多相關React受控組件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 解決React報錯You provided a `checked` prop to a form field

    解決React報錯You provided a `checked` prop&n

    這篇文章主要為大家介紹了React報錯You provided a `checked` prop to a form field的解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 詳解React中錯誤邊界的原理實現與應用

    詳解React中錯誤邊界的原理實現與應用

    在React中,錯誤邊界是一種特殊的組件,用于捕獲其子組件樹中發(fā)生的JavaScript錯誤,并防止這些錯誤冒泡至更高層,導致整個應用崩潰,下面我們就來看看它的具體應用吧
    2024-03-03
  • create-react-app修改為多頁面支持的方法

    create-react-app修改為多頁面支持的方法

    本篇文章主要介紹了create-react-app修改為多頁面支持的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • React使用TailwindCSS的實現示例

    React使用TailwindCSS的實現示例

    TailwindCSS是一個實用優(yōu)先的CSS框架,本文主要介紹了React使用TailwindCSS的實現示例,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • React內部實現cache方法示例詳解

    React內部實現cache方法示例詳解

    這篇文章主要為大家介紹了React內部實現cache方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • React實現歌詞滾動效果(跟隨音樂播放時間滾動)

    React實現歌詞滾動效果(跟隨音樂播放時間滾動)

    這篇文章主要為大家詳細介紹了React實現歌詞滾動效果(跟隨音樂播放使勁按滾動),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2024-02-02
  • 淺談react性能優(yōu)化的方法

    淺談react性能優(yōu)化的方法

    這篇文章主要介紹了淺談react性能優(yōu)化的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • React渲染的優(yōu)化方案

    React渲染的優(yōu)化方案

    react的渲染機制是非常獨特的,有別于 Vue 框架的渲染次數的優(yōu)化計算,React 很久以來就有PureComponent、shouldUpdate,本文小編給大家介紹了React渲染的優(yōu)化方案,需要的朋友可以參考下
    2024-08-08
  • 詳解如何在React組件“外”使用父組件的Props

    詳解如何在React組件“外”使用父組件的Props

    這篇文章主要介紹了詳解如何在React組件“外”使用父組件的Props,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 使用React Native創(chuàng)建以太坊錢包實現轉賬等功能

    使用React Native創(chuàng)建以太坊錢包實現轉賬等功能

    這篇文章主要介紹了使用React Native創(chuàng)建以太坊錢包,實現轉賬等功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07

最新評論

洪江市| 衢州市| 松江区| 灵武市| 浦东新区| 淮南市| 织金县| 泸州市| 英德市| 清镇市| 黄石市| 菏泽市| 调兵山市| 保康县| 辽阳市| 遵义县| 高淳县| 叙永县| 繁昌县| 新闻| 玉门市| 枣庄市| 木兰县| 洛扎县| 新昌县| 平江县| 马尔康县| 阜南县| 民和| 东乡| 青浦区| 汶川县| 嘉义市| 洪洞县| 安义县| 蓬安县| 涟源市| 手游| 广德县| 明溪县| 泗水县|