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

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

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

一、非受控組件

表單中輸入類DOM的值現(xiàn)用現(xiàn)取

<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的值,隨著輸入,能把輸入的值維護(hù)到狀態(tài)state中,需要用的時(shí)候再從狀態(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})
		}
		//表單提交的回調(diào)
		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>

三、高階函數(shù)(函數(shù)柯里化)實(shí)現(xiàn)

1、定義

(1)高階函數(shù)

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

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

2.若A函數(shù),調(diào)用的返回值依然是一個(gè)函數(shù),那么A就可以稱之為高階函數(shù)。

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

(2)函數(shù)的柯里化

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

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

2、實(shí)現(xiàn)

<script type="text/babel">
	class Login extends React.Component{
		state = {
			username:'', //用戶名
			password:'' //密碼
		}
		//保存表單數(shù)據(jù)到狀態(tài)中
		saveFormData = (dataType)=>{
			return (event)=>{
				this.setState({[dataType]:event.target.value})
			}
		}
		//表單提交的回調(diào)
		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綁定的必須是一個(gè)函數(shù),this.saveFormData()調(diào)用saveFormData 函數(shù)的返回值是一個(gè)函數(shù)

四、不用函數(shù)柯里化的實(shí)現(xiàn)

<script type="text/babel">
	class Login extends React.Component{
		state = {
			username:'', //用戶名
			password:'' //密碼
		}
		//保存表單數(shù)據(jù)到狀態(tài)中
		saveFormData = (dataType,event)=>{
			this.setState({[dataType]:event.target.value})
		}
		//表單提交的回調(diào)
		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()調(diào)用saveFormData 函數(shù)返回一個(gè)值然后放在一個(gè)函數(shù)里面

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

相關(guān)文章

最新評(píng)論

璧山县| 黔西| 红桥区| 厦门市| 裕民县| 邵武市| 邻水| 米脂县| 万载县| 奉贤区| 松滋市| 鄂托克旗| 海林市| 沙田区| 垣曲县| 方山县| 铜鼓县| 马龙县| 大同市| 西城区| 玛纳斯县| 孟连| 濉溪县| 封丘县| 仪陇县| 池州市| 邹城市| 商水县| 桃园县| 洪湖市| 拉萨市| 宁晋县| 台南县| 建始县| 桂阳县| 武定县| 石嘴山市| 莱芜市| 凌源市| 福鼎市| 东兰县|