欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、非受控組件

表單中輸入類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的值,隨著輸入,能把輸入的值維護到狀態(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>

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

1、定義

(1)高階函數(shù)

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

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

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

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

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

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

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

2、實現(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})
			}
		}
		//表單提交的回調
		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綁定的必須是一個函數(shù),this.saveFormData()調用saveFormData 函數(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})
		}
		//表單提交的回調
		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 函數(shù)返回一個值然后放在一個函數(shù)里面

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

相關文章

  • React項目中報錯:Parsing error: The keyword 'import' is reservedeslint的問題及解決方法

    React項目中報錯:Parsing error: The keyword &a

    ESLint 默認使用的是 ES5 語法,如果你想使用 ES6 或者更新的語法,你需要在 ESLint 的配置文件如:.eslintrc.js等中設置 parserOptions,這篇文章主要介紹了React項目中報錯:Parsing error: The keyword 'import' is reservedeslint的問題及解決方法,需要的朋友可以參考下
    2023-12-12
  • React使用redux基礎操作詳解

    React使用redux基礎操作詳解

    這篇文章主要介紹了如何在React中直接使用Redux,目前redux在react中使用是最多的,所以我們需要將之前編寫的redux代碼,融入到react當中去,本文給大家詳細講解,需要的朋友可以參考下
    2023-01-01
  • React使用Context與router實現(xiàn)權限路由詳細介紹

    React使用Context與router實現(xiàn)權限路由詳細介紹

    這篇文章主要介紹了React使用Context與router實現(xiàn)權限路由的詳細過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • react 組件表格固定底部的實現(xiàn)代碼

    react 組件表格固定底部的實現(xiàn)代碼

    在React中,要實現(xiàn)一個組件表格并且固定底部,可以使用CSS的固定定位或絕對定位來實現(xiàn),下面通過示例代碼給大家分享react 組件表格固定底部的實現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • React中實現(xiàn)組件通信的幾種方式小結

    React中實現(xiàn)組件通信的幾種方式小結

    在構建復雜的React應用時,組件之間的通信是至關重要的,從簡單的父子組件通信到跨組件狀態(tài)同步,不同組件之間的通信方式多種多樣,下面我們認識react組件通信的幾種方式,需要的朋友可以參考下
    2024-04-04
  • React中使用react-player 播放視頻或直播的方法

    React中使用react-player 播放視頻或直播的方法

    這篇文章主要介紹了React中使用react-player 播放視頻或直播,本文教大家如何使用react框架及創(chuàng)建實例的代碼,本文內容簡短給大家介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • 詳解React組件卸載怎么中止遞歸方法

    詳解React組件卸載怎么中止遞歸方法

    最近在處理項目代碼的時候,出現(xiàn)了一個bug,組件中的方法在組件卸載后仍然在執(zhí)行,代碼片段發(fā)給我看,但是變量的用意我也不懂,只看到有方法調用自身方法,這不就是遞歸嘛,所以本文詳細給大家介紹了React組件卸載怎么中止遞歸方法,需要的朋友可以參考下
    2024-01-01
  • React?實現(xiàn)具備吸頂和吸底功能組件實例

    React?實現(xiàn)具備吸頂和吸底功能組件實例

    這篇文章主要為大家介紹了React?實現(xiàn)具備吸頂和吸底功能組件實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • react基于react-slick實現(xiàn)多圖輪播效果

    react基于react-slick實現(xiàn)多圖輪播效果

    React slick是一個使用React構建的輪播組件,下面這篇文章主要給大家介紹了關于react基于react-slick實現(xiàn)多圖輪播效果的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • React DOM-diff 節(jié)點源碼解析

    React DOM-diff 節(jié)點源碼解析

    這篇文章主要為大家介紹了React DOM-diff節(jié)點源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論