非受控组件

受控组件和非受控组件的区别 ----- 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

react组件之非受控组件和高阶组件的更多相关文章

  1. React 精要面试题讲解(五) 高阶组件真解

    说明与目录 在学习本章内容之前,最好是具备react中'插槽(children)'及'组合与继承' 这两点的知识积累. 详情请参照React 精要面试题讲解(四) 组合与继承不得不说的秘密. 哦不好意 ...

  2. React躬行记(10)——高阶组件

    高阶组件(High Order Component,简称HOC)不是一个真的组件,而是一个没有副作用的纯函数,以组件作为参数,返回一个功能增强的新组件,在很多第三方库(例如Redux.Relay等)中 ...

  3. React组件重构:嵌套+继承 与 高阶组件

    前言 在最近做的一个react项目中,遇到了一个比较典型的需要重构的场景:提取两个组件中共同的部分. 最开始通过使用嵌套组件和继承的方式完成了这次重构. 但是后来又用高阶组件重新写了一遍,发现更好一点 ...

  4. react.js 高阶组件----很简单的实例理解高阶组件思想

    调试代码之前,我设置了两个缓存 分别是username和content 在控制台console设置两个缓存代码 localStorage.setItem('username','老王')localSt ...

  5. 聊聊React高阶组件(Higher-Order Components)

    使用 react已经有不短的时间了,最近看到关于 react高阶组件的一篇文章,看了之后顿时眼前一亮,对于我这种还在新手村晃荡.一切朝着打怪升级看齐的小喽啰来说,像这种难度不是太高同时门槛也不是那么低 ...

  6. React文档(二十四)高阶组件

    高阶组件(HOC)是React里的高级技术为了应对重用组件的逻辑.HOCs本质上不是React API的一部分.它是从React的组合性质中显露出来的模式. 具体来说,一个高阶组件就是一个获取一个组件 ...

  7. 函数式编程与React高阶组件

    相信不少看过一些框架或者是类库的人都有印象,一个函数叫什么creator或者是什么什么createToFuntion,总是接收一个函数,来返回另一个函数.这是一个高阶函数,它可以接收函数可以当参数,也 ...

  8. React 高阶组件浅析

    高阶组件的这种写法的诞生来自于社区的实践,目的是解决一些交叉问题(Cross-Cutting Concerns).而最早时候 React 官方给出的解决方案是使用 mixin .而 React 也在官 ...

  9. react 高阶组件的 理解和应用

    高阶组件是什么东西 简单的理解是:一个包装了另一个基础组件的组件.(相对高阶组件来说,我习惯把被包装的组件称为基础组件) 注意:这里说的是包装,可以理解成包裹和组装: 具体的是高阶组件的两种形式吧: ...

  10. react高阶组件

    高阶组件 为了提高组件复用性,在react中就有了HOC(Higher-Order Component)的概念.所谓的高阶组件,其本质依旧是组件,只是它返回另外一个组件,产生新的组件可以对属性进行包装 ...

随机推荐

  1. python+scrcpy实现将安卓设备录屏并保存到pc本地

    一)scrcpy下载及安装 参考链接:https://zhuanlan.zhihu.com/p/80264357 二)python+scrcpy实现将安卓设备录屏并保存到pc本地 示例代码: impo ...

  2. vi/vim 命令

    vim 文件路径 编辑一个文件,英文模式, 按i:输入模式 按Esc:命令模式 输入模式 dd 删除一行 gg 跳到开头 shift+g 跳到结尾 U 撤销 shift+U 恢复撤销 命令模式 :wq ...

  3. phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)(Kali)

    ​  phpMyAdmin是一套开源的.基于Web的MySQL数据库管理工具.其index.php中存在一处文件包含逻辑,通过二次编码即可绕过检查,造成远程文件包含漏洞. 通过vulhub靶场进行复现 ...

  4. vue组件 子组件没有事件怎么 向父组件传递数据

    通过ref去接收值!!! 需求图片 代码实现 //----------父组件 <div class="fingerprint-bottom"> <el-tabs ...

  5. 关于IllegalMonitorStateException异常的解释之一

    注意 在同步控制方法或同步控制块里调用wait(),notify()和notifyAll().如果在非同步控制方法里调用这些方法,程序能通过编译,但运行的时候,将得到IllegalMonitorSta ...

  6. 字典方法 setdefault()、pprint;迭代、递归的区别

    计算一个字符串中每个字符出现的次数 import pprint message = 'It was a bright cold day in April, ' \ 'and the clocks we ...

  7. 07 HBase操作

    1.理解HBase表模型及四维坐标:行键.列族.列限定符和时间戳. 2.启动HDFS,启动HBase,进入HBaseShell命令行. 3.列出HBase中所有的表信息list 4.创建表create ...

  8. 狂神的学习笔记demo11(包机制)

    无法生成子包的问题:设置图标里的Compact Middle Packages勾去掉 //定义包 package package com.panda.base1; //导入包import import ...

  9. 【vue】数据代理

    Object.defineProperty()方法 我们先来看几段代码 常用添加属性的方法,以添加age举例 ,点击查看代码 let person = { name: '张三', sex: '男', ...

  10. Ansys-CHEMKIN-pro表面反应机制输入(Surface Kinetics Input)规则

    chemkin表面反应机制文件(Ansys-CHEMKIN-pro表面反应机制输入) 1. 文件包含表面活性位(相).表面组分,固相组分.固相,热力学数据,反应机制: 2. 顺序:物质名称,活性位数据 ...