调试代码之前,我设置了两个缓存

分别是username和content

在控制台console设置两个缓存代码

localStorage.setItem('username','老王')
localStorage.setItem('content','类容')

运行下面代码一定要先设置这两个缓存,因为我在高阶组件封装了公共方法,调用缓存到输入框的value里

,高阶组件返回的组件调用了这个方法

/*
* 高阶组件其实是一个函数,传进去的一个组件,返回一个新组件
* 实现不同组件中的逻辑复用,
* 将一些可以单独抽离的逻辑处理给要返回的新组件里面复用
* 然后将单独的组件,传递给新组件
* */ import React, {Component} from 'react' import ReactDOM from 'react-dom'
//高阶组件定义,里面return 返回新组件
function local(Comp,key){
class Proxy extends Component{
//constructor构造函数 定义你的状态
constructor(){
super();
this.state={data:''}
}
//钩子函数,组件渲染之前
componentWillMount(){
        //取缓存值
let data=localStorage.getItem(key);
this.setState({data})
}
handBlur=(event)=>{
      //获取当前标签的value
let data=event.target.value;
localStorage.setItem(key,data);
} render(){
//Comp是传入进来的组件
return(
<Comp handBlur={this.handBlur} data={this.state.data}/>
)
}
}
return Proxy
}
//定义你的单独组件
function Input(props) {
return <input type="text" defaultValue={props.data} onBlur={props.handBlur}/>
}
function Textareas(props) {
return <textarea defaultValue={props.data}></textarea>
}
function Div() {
return <div>111</div>
}
//调用高阶函数,返回新的组件
let LocalInput=local(Input,'username')
let LocalTextareas=local(Textareas,'content')
let LocalDiv=local(Div)
//要渲染的总组件
class From extends Component {
render() {
return (
<div>
<form>
用户名 <LocalInput/>
类容 <LocalTextareas/>
<LocalDiv></LocalDiv>
</form>
</div>
)
}
}
ReactDOM.render(<From></From>,document.querySelector("#root"))

react.js 高阶组件----很简单的实例理解高阶组件思想的更多相关文章

  1. [.NET] 打造一个很简单的文档转换器 - 使用组件 Spire.Office

    打造一个很简单的文档转换器 - 使用组件 Spire.Office [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6024827.html 序 之前,& ...

  2. js图片拖放原理(很简单,不是框架,入门基础)

    <html> <meta> <script src='jquery-1.8.3.min.js'></script> <script> /* ...

  3. createjs easal.js制作了一个很简单的链路图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. React.js 小书 Lesson24 - PropTypes 和组件参数验证

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson24 转载请注明出处,保留原文链接和作者信息. 我们来了到了一个非常尴尬的章节,很多初学的朋友 ...

  5. React.js 小书 Lesson11 - 配置组件的 props

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson11 转载请注明出处,保留原文链接和作者信息. 组件是相互独立.可复用的单元,一个组件可能在不 ...

  6. React.js 小书介绍

    React.js 小书 Github 关于作者 这是一本关于 React.js 的小书. 因为工作中一直在使用 React.js,也一直以来想总结一下自己关于 React.js 的一些知识.经验.于是 ...

  7. 【React.js小书】动手实现 React-redux(五):Provider - 方志

    我们要把 context 相关的代码从所有业务组件中清除出去,现在的代码里面还有一个地方是被污染的.那就是 src/index.js 里面的 Index: 1234567891011121314151 ...

  8. 13个精选的React JS框架

    如果你正在使用 React.js 或 React Native 创建用户界面,可以试一试本文推荐的这些框架. React.js 和 React Native 是流行的用户界面(UI)开发平台,且都是开 ...

  9. React.js - 入门

    React.js - 第1天 1. React简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 ...

随机推荐

  1. PKU_campus_2018_H Safe Upper Bound

    思路: 题目链接http://poj.openjudge.cn/practice/C18H/ 用2147483647除以最大素因子. 这里用了Pollard_rho因子分解算法,模板参考了http:/ ...

  2. Java单例模式的6种写法

    在Java中,单例有很多种写法,面试时,手写代码环节,除了写算法题,有时候也会让手写单例模式,这里记录一下单例的几种写法和优缺点. 初级写法 懒汉式 饿汉式 双锁检验 内部类 枚举式 1.初级写法 p ...

  3. HttpURLConnection读取http信息

    废话不多说,直接上code. package mytest; import java.io.BufferedReader; import java.io.IOException; import jav ...

  4. centos7 设置grub密码及单用户登录实例

    centos7与centos6在设置grub密码的操作步骤上有很大的差别,特此记录供以后查用 grub加密的目的: 防止不法分子利用单用户模式修改root密码 给grub加密可以采用明文或者加密的密文 ...

  5. iview table icon dorpdown html页面级别vue组件 #vuez#

    iview table icon dorpdown html页面级别vue组件 <!DOCTYPE html> <html> <head> <meta cha ...

  6. js 数组元素排序?

    Part.1  sort 方法 js 有自带排序方法 sort(),  默认 升序 排列 如: data() { return { arr: [1,3,2,5,6,8,7,4,9] } }, 控制台如 ...

  7. ios之AFN

    https://github.com/AFNetworking/AFNetworking 与asi-http-request功能类似的网络库,不过是基于NSURLConnection 和 NSOper ...

  8. vue 中scroll事件不触发问题

    在vue项目中需要监听滚动条滚动的位置,结果写了scroll监听事件就是不生效,最后查资料发现是页面有样式设置了over-flow:scroll,去掉之后完美解决.(页面样式中存在over-flow: ...

  9. image的resizeMode属性

    Image组件必须在样式中声明图片的宽和高.如果没有声明,则图片将不会被呈现在界面上.    我们一般将Image定义的宽和高乘以当前运行环境的像素密度称为Image的实际宽高. 当Image的实际宽 ...

  10. mysql两种常用备份工具

    一.mysqldump备份: 在开启GTID模式时,在master上执行的备份: --set-gtid-purged=OFF 在开启GTID模式时,要在slave上执行,想重新搭建一套slave环境. ...