react组件之非受控组件和高阶组件

非受控组件

受控组件和非受控组件的区别 ----- value

复制代码
import React, { Component } from 'react'

export default class extends Component {
  constructor (props) {
    super(props);
    this.state = {
      username: '吴大勋',
      password: '123465'
    }
  }
  render () {
    return (
      <div>
        <h1>非受控组件</h1>
        <input type="text" defaultValue = { this.state.username} ref="username" onChange={ () => {
          if(this.refs.username.value.length < 6) {
            console.log('111111111')
          } else {
            console.log('ok')
          }
          this.setState({
            username: this.refs.username.value
          })
        }}/>
        <input type="password" defaultValue = { this.state.password} ref="password" onChange={ () => {
          this.setState({
            password: this.refs.password.value
          })
        }}/>
        <input type="file" ref="file" multiple/>
        <button onClick= { () => {
          console.log(this.refs.username.value)
          console.log(this.refs.password.value)
          // .files可以获取文件的信息
          /**
           * lastModified: 1572398893933
            lastModifiedDate: Wed Oct 30 2019 09:28:13 GMT+0800 (中国标准时间) {}
            name: "2.png"
            size: 24396
            type: "image/png"
            webkitRelativePath: ""
           */
          console.log(this.refs.file.files)
        } }>获取表单信息</button>
      </div>
    )
  }
}
复制代码

高阶组件

高阶组件其实就是一个纯函数,接收一个组件作为参数,返回一个新的组件

高阶组件1

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  
</body>
<script src="test.js"></script>
<script>
  
</script>
</html>
复制代码
复制代码
function welcome(){
}

function goodbye(){
}

// 高阶函数
function func (fn) { // fn为一个参数
  return function () {
    let username = localStorage.getItem('username');
    console.log(username)
  }
}

welcomeFn = func(welcome)
goodbyeFn = func(goodbye)

// console.log(welcomeFn)
goodbyeFn()
goodbyeFn()
复制代码

高阶组件2

复制代码
import React, { Component } from 'react'
import Welcome from './Welcome'
import Goodbye from './Goodbye'
export default class extends Component {
  constructor (props) {
    super(props);
  }
  render () {
    return (
      <div>
        <h1>高阶组件</h1>
        <Welcome />
        <Goodbye />
      </div>
    )
  }
}
复制代码

welcome.js

复制代码
import React, {Component} from 'react'

class Com extends Component {
  constructor (props) {
    super(props)
    this.state = {
      username: ''
    }
  }

  componentDidMount () {
    let username = localStorage.getItem('username')
    this.setState({
      username
    })
  }

  render () {
    return (
      <div>
      welcome { this.state.username }
      </div>
    )
  }
}

export default Com
复制代码

goodbye.js

复制代码
import React, {Component} from 'react'

class Com extends Component {
  constructor (props) {
    super(props)
    this.state = {
      username: ''
    }
  }

  componentDidMount () {
    let username = localStorage.getItem('username')
    this.setState({
      username
    })
  }

  render () {
    return (
      <div>
      goodbye { this.state.username }
      </div>
    )
  }
}

export default Com
复制代码

 

简化高阶组件3

复制代码
import React, { Component } from 'react'
import Welcome from './Welcome'
import Goodbye from './Goodbye'
export default class extends Component {
  constructor (props) {
    super(props);
  }
  render () {
    return (
      <div>
        <h1>高阶组件</h1>
        <Welcome />
        <Goodbye />
      </div>
    )
  }
}
复制代码

welcome.js

复制代码
import React, {Component} from 'react'
import higherorderfn from './higherorderfn'
// console.log(higherorderfn)
class Com extends Component {
  render () {
    return (
      <div>
      welcome ---- { this.props.username }
      </div>
    )
  }
}
const NewCom = higherorderfn(Com)
export default NewCom
复制代码

goodbye.js

复制代码
import React, {Component} from 'react'
import higherorderfn from './higherorderfn'
// console.log(higherorderfn)
class Com extends Component {
  render () {
    return (
      <div>
      goodbye --- { this.props.username }
      </div>
    )
  }
}
const NewCom = higherorderfn(Com)
export default NewCom
复制代码

higherorderfn.js

复制代码
import React, {Component} from 'react'
import higherorderfn from './higherorderfn'
// console.log(higherorderfn)
class Com extends Component {
  render () {
    return (
      <div>
      goodbye --- { this.props.username }
      </div>
    )
  }
}
const NewCom = higherorderfn(Com)
export default NewCom
复制代码

 

 

 

 

 

 

posted @   菜鸟小何  阅读(233)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示