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
长风破浪会有时,直挂云帆济沧海
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!