React中绑定文本框与State中的值

简介: 一、//#region+//#endregion注释格式二、React中绑定数据的流程三、绑定文本框的值

React中绑定文本框与State中的值

 

内容简介:

一、//#region+//#endregion注释格式

二、React中绑定数据的流程

三、绑定文本框的值

 

 

一、//#region+//#endregion注释格式


React中,如果代码篇幅过长需要注释代码,但被注释的代码不能被折叠了,又想要把它折叠起来,可以使用下面的方法。

Visual Studio Code中提供了一个新的注释格式,使用//#region(区间开始)//#endregion(区间结束),区间中可以放想要折叠的代码,把代码放在其中就可以折叠了。

如上操作折叠起来除了三个点,里面什么都没有,可以在里面取一个名字,再折叠起来就会显示介绍。

 

例如:

例一:(介绍React中绑定事件的标准格式)

//#region介绍React中绑定事件的标准格式

//import React from 'react'

//export default class BindEvent extends React.Componet{

// constructor(){

//   super()

//   this.state={}

// }

// render(){

//   return <div>

//        <button onClick={()=> this.show('','')}>按钮

//        </button>

//      </div>

//     }

//     show=(arg1,arg2)=>{

//       console.log('show方法被调用了'+arg1+arg2)

//     }

//  }

//#endregion

 

折叠后的效果如下:

//#region介绍React中绑定事件的标准格式

 

例二:(绑定事件,并在事件处理函数中,使用this.setState)

//#region绑定事件,并在事件处理函数中,使用this.setState

//import React from 'react'

//export default class BindEvent extends React.Component{

// constructor() {

//    super()

//    this.state = {

//      msg: '哈哈',

//      name:'zs',

//      age:22,

//      gender:''

//    }

//   }

// render(){

//    return<div>

//      <button onClick={() => this.show('','')}>按钮</button>

//      <h3>{this.state.msg}</h3>

//    </div>

//  }

//   show =(arg1,arg2)=>{

//     //console.log('show方法被调用了'+arg1+arg2)

//     //注意:React中,如果想为state中的数据,重新赋值,不要使用this.state.***=

//     //应该调用React提供的this.setState({msg:'123'})

//     //this.state.msg='oooooo'

//     //React中,推荐使用this.setState({})修改状态值

//     this.setState({

//       //setState,只会把对应的state状态更新,而不会覆盖其它的state状态

//       msg:'123'+arg1+arg2

//     },fuction(){//回调

//      console.log(this.state.msg)

//     })

//     //注意:this.setState方法的执行是异步的;

//     //如果大家在调用完this.setState之后,又想立即拿到最新的state值,需要使用this.setState({},callback)

//   }

//  }

//#endregion

折叠后的效果如下:

//#region绑定事件,并在事件处理函数中,使用this.setState…

 

二、React中绑定数据的流程


(1)默认情况下,在React中,如果页面上的表单元素,绑定了state上的状态值,那么,每当state上状态值变化,必然会自动把最新的状态值,自动同步到页面上。

单向数据流(状态变化 -> 自动更新页面)

 

(2)  UI页面上,文本框的内容变化了,想要把最新的值,同步回state中,此时React没有这种自动同步机制。

React中,需要程序员手动监听文本框的onChange事件;在onChange事件中,拿到最新的文本框的值;程序员调用this.setState({})手动把最新的值同步到state中。

 

详解如下图:

image.png

单向的数据流:从状态自动同步到页面。

双向数据流:Vue中,通过v-model来实现从状态改变自动同步到页面,在页面上修改的数据又会自动同步到状态中。

 

介绍React中绑定事件的标准格式,onClick中,加箭头函数(=>)和方法的调用(this.show()),实现多个参数的传输;处理函数需要定义为句名的箭头函数(show=(arg1,arg2)=>{}),原本是没有名称的,可以使用等号(=)来赋予名称。

 

代码如下:

import React from 'react'

export default class BindEvent extends React.Componet{

 constructor(){

  super()

  this.state={}

 }

 render(){

  return <div>

        <button onClick={()=> this.show('','')}>按钮

        </button>

      </div>

      }

     show=(arg1,arg2)=>{

       console.log('show方法被调用了'+arg1+arg2)

      }

   }

 

三、绑定文本框的值


(1)创建文本框

在页面上加一个文本框,可使用以下代码:

<input type="text" style={{width:'100%'}}/>

 

(2)数据绑定

上述代码只生成了一个文本框,为了把文本框的value值和状态上的msg属性进行数据绑定,所以可以修改代码,实现数据的绑定。

代码如下:

<input type="text" style={{width:'100%'}} value={this.stat

e.msg}/>

如果只把文本框的value属性绑定到了state状态,但不提供onChange处理函数,得到的文本框,将会是一个只读的文本框。还会报警告。

 

当为文本框绑定value值以后,要么同时提供一个readOnly,要么提供一个onChange处理函数。

<input type="text" style={{width:'100%'}} value={this.state.msg} readOnly/>

<input type="text" style={{width:'100%'}} value={this.state.msg} onChange={()=>this.txtChange()} />

每当文本框中监听到文本变化,便会触发onChange事件。接着调用箭头函数,然后调用this.txtChanged()函数。

 

每当文本框的内容变化了,必然会调用这个this.txtChanged

onChange事件中,获取文本框的值。

 

有两种方案:

方案一:

通过事件参数e来获取。当触发input事件,必将调用箭头函数,在箭头函数的形参中应该有参数e,那么在调用txtChanged函数时,需要把参数e传过去;e.target的源为触发事件input文本框,所以要得到value值,直接.value获取,一按键盘最新的value值就会被输出。

代码如下:

<input type="text" style={{width:'100%'}} value={this.state.msg}

onChange={(e)=>this.txtChanged(e)}/>

txtChanged=(e)=>{

console.log(e.target.value)

}

 

方案二:

通过refs来获取。和Vue中差不多,Vue为界面上的元素提供了def的属性,如果想要获取元素引用,则需要使用this.$refs.引用名称;在React中,也有ref,如果要获取元素的引用this.refs.引用名称。

两者的区别在于,Vue中有$,React中没有$

this.refs.txt获取的是文本框,所直接使用this.refs.txt.value可获取文本框中的值。

<input type="text" style={{width:'100%'}} value={this.state.msg}

onChange={(e)=>this.txtChanged(e)} ref="txt"/>

txtChanged=(e)=>{

console.log(this.refs.txt.value)

}

 

(3)同步数据

上述完成后,程序员需要调用this.setState({})手动把最新的值同步到state中,只要同步回去了,状态是最新的,再把状态同步到页面上,就实现了数据的绑定。

调用this.setStatemsg赋值,页面上的值得到了同步。

const newVal = e.target.value

 this.setState({

    msg:newVal

  })

 

完整代码,如下:

import React from 'react'

export default class BindEvent extends React.Component{

 constructor() {

super()

this.state = {

msg: '哈哈',

name:'zs',

 age:22,

gender:''

}

}

 render(){

return<div>

 <button onClick={() => this.show('','')}>按钮</button>

 <h3>{this.state.msg}</h3>

   <input type="text" style={{width:'100%'}}value={this.state

   .msg}onChange={()=>this.txtChange()} />

</div>

  }

 txtChanged=(e)=>{

   const newVal = e.target.value

     this.setState({

       msg:newVal

      })

  }

show = (arg1,arg2)=>{

}

}

相关文章
|
6月前
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
109 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
6月前
|
前端开发
学习react基础(2)_props、state和style的使用
本文介绍了React中组件间数据传递的方式,包括props和state的使用,以及如何在React组件中使用style样式。
73 0
|
10月前
|
存储 前端开发 API
第六章 react组件实例中三大属性之State
第六章 react组件实例中三大属性之State
100 0
|
5月前
|
前端开发 JavaScript 调度
React 组件状态(State)
10月更文挑战第8天
61 1
|
7月前
|
前端开发
React组件实例更改state状态值(四)
【8月更文挑战第14天】React组件实例更改state状态值(四)
75 1
React组件实例更改state状态值(四)
|
7月前
|
前端开发 JavaScript
React组件实例state(三)
【8月更文挑战第14天】React组件实例state(三)
46 1
React组件实例state(三)
|
6月前
|
前端开发
React使用hooks遇到的坑_state中的某几个属性数据变成了空字符
本文讨论了在React使用hooks时遇到的一个问题:state中的某些属性数据变成了空字符。作者通过在修改函数中重新解构赋值来获取最新的state值,解决了因数据更新不及时导致的问题。
114 0
|
7月前
|
存储 前端开发
React 中的 state 和 props 有什么区别?
【8月更文挑战第31天】
97 0
|
8月前
|
存储 前端开发 JavaScript
前端框架与库 - React基础:组件、Props、State
【7月更文挑战第12天】React是JavaScript库,专注UI构建,基于组件化。组件是UI模块,可函数式或类定义。Props是组件间安全传递数据的只读参数,用defaultProps和propTypes保证正确性。State则是组件内部可变数据,用于驱动更新。使用setState()确保正确变更和渲染。了解并妥善处理这些概念是高效React开发的基础。
99 7
|
9月前
|
存储 前端开发 JavaScript
React中有效地使用props和state来管理组件的数据和行为
React中有效地使用props和state来管理组件的数据和行为