React学习日记6


032 react中的事件处理

  1. 通过onXXX属性指定事件处理函数(注意大小写)—为了更好的兼容性
    1. react使用自定义合成事件,而不是使用原生的DOM事件
    2. react中的事件是事件委托(委托给组件最外层的元素)—为了高效
  2. 通过event.target 得到发生事件的DOM元素 ——不要过度使用ref

不要过度使用refs

refs很多时候可以省略

     
) } showData = ()=>{ console.log(this.myRef); } // 当发生事件的元素和需要操作的元素是一个元素可以省略 ref //没有refs,react事件可以自动将事件源作为参数 showData2 = (event)=>{ console.log(event.target.value); } }

033 非受控组件

现用现取 就是非受控

class Login extends React.Component{
      handleSubmit = (event)=>{
        // 阻止表单提交
        event.preventDefault();
        const {username,password} = this
        alert(`username:${username.value},password:${password.value}`)
      }
      render(){
        return(
          
用户名: this.username=c} type="text" name = 'username'/> 密码: this.password=c} type="password" name='password' />
) } }

不推荐refs

034 受控组件

class Login extends React.Component{
      state = {
        username:'',
        password:'',
      }
//这里的event是react帮我们维护的
      handleSubmit = (event)=>{
        // 阻止表单提交
        event.preventDefault();
        const {username,password} = this.state
        alert(username,password)
      }
      saveUsername = (e)=>{
        this.setState({username:e.target.value})
      }
      savePassword = (e)=>{
        this.setState({password:e.target.value})
      }
      // 页面所有输入类的DOM[比如input]随着输入维护到状态中,等需要用的时候再取出来
      render(){
        return(
          
用户名: 密码:
) } }

类似Vue中的双向数据绑定 推荐使用受控组件,省略掉refs

035 优化和函数柯里化

class Login extends React.Component{
      state = {
        username:'',
        password:'',
      }
      handleSubmit = (event)=>{
        // 阻止表单提交
        event.preventDefault();
        const {username,password} = this.state
        alert(username,password)
      }
      saveFormData = (dataType)=>{
        //这个dataTyp就是一个参数,这里运用到了柯里化,函数里面返回函数
        console.log(dataType);
        return (event)=>{
          //this.setState({dataType:event.target.value}) 这是错误的,在state里面都是字符串形式 dataType和'dataType'一样的
          this.setState({[dataType]:event.target.value})
        }
      }
      // 页面所有输入类的DOM[比如input]随着输入维护到状态中,等需要用的时候再取出来
      render(){
        return(
          
用户名: 密码:
) } }

036 非柯里化的写法

用户名: {this.saveFormData('username'),event}} type="text" name = 'username'/>