热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

72react_高阶组件_LocalStorage

??目录高阶组件:1LocalStorage:3???高阶组件:要清楚每一步的返回值,对理解3-4层的箭头函数有帮助;?装饰器,新版ES2016中装饰器的支

 

 

目录

高阶组件:... 1

Local Storage... 3

 

 

 

高阶组件:

要清楚每一步的返回值,对理解3-4层的箭头函数有帮助;

 

装饰器,新版ES2016中装饰器的支持,且只能装饰类

带参装饰器;

 

例:

Root组件进行增强,如在Rootdiv外部再加入其它div

import React from 'react';

import ReactDom from 'react-dom';

 

// let Root = props =>

my name is {props.name}
;

 

// function Wrapper(comp, props) {   //X,尝试如何能完成装饰功能

//     // return comp;

//     // return comp(props);

//     return

Test {comp}
{props}
;

// }

// let NewRoot = Wrapper(Root, name='magedu');

// ReactDom.render(, document.getElementById('root'));

 

// function Wrapper(Component, props) {   //X,没法传props,需进一步柯里化

//     return (

//         {props.name}

//        


//        

//    

)

// }

// ReactDom.render(, document.getElementById('root'));

 

// function Wrapper(Component) {   //可用箭头函数简化

//     return function(props) {

//         return (

//             {props.name}

//            

//            

//        

)

//     }

// }

 

let Wrapper = Component => props =>

    <div>

        {console.log(props,typeof(props))}   // Object {name: "magedu"} "object"

        {props.name}

        <hr />

        {/* */}

        <Component {...props}/>   //类似pykwargs,解构,给组件增加了属性;可使增强后的Root拥有name属性

    div>

 

@Wrapper

class Root extends React.Component {

    render() {

        return (<div>

            my name is {this.props.name}   {/*Root也显示name*/}

            <br />

        div>)

    }

}

 

ReactDom.render(<Root name='magedu' />, document.getElementById('root'));

 

 

例,带参装饰器;

let Wrapper = id => Component => props =>   //增加id参数

    <div id='rooot'>

        {console.log(props,typeof(props))}

        {props.name}

        <hr />

        {/* */}

        <Component {...props}/>

    div>

 

@Wrapper('wrapper')

class Root extends React.Component {

    render() {

        return (<div>

            my name is {this.props.name}

            {console.log(this.props)}

            <br />

        div>)

    }

}

 

ReactDom.render(<Root name='magedu' />, document.getElementById('root'));

 

例:

let Wrapper = id => Component => props =>

    <div id='rooot'>

        {console.log(props,typeof(props))}

        {props.name}

        <hr />

        {/* */}

        <Component {...props}/>

    div>

 

let Root = props =>

    <div>

        Root

        <br />

        {props.name}

    div>

let NewRoot = Wrapper('wrapper')(Root);   //装饰器的@只能用于装饰类,若要装饰函数这样写

ReactDom.render(<NewRoot name='magedu' />, document.getElementById('root'));

 

 

Local Storage

browser端持久化方案之一,HTML5标准增加的技术;

Local Storage是为了存储交到的数据,如json

key-value存储;

数据会存储在不同的域名下面;

不同browser对单个域名下存储数据的长度支持不同,有的最多支持2M

 

browser-->F12Application-->Storage下:

72react_高阶组件_LocalStorage

注:

Session Storage,会话级的,browser关闭会话结束,数据清除;

Local StorageSession StorageCOOKIEskv存储;

IndexedDBWeb SQL可直接用SQL语句;

 

 

store.js

是一个兼容所有browserLocal Storage包装器,不需要借助COOKIEflash

store.js会根据浏览器自动选择使用Local Storageglobal storageuserData来实现本地存储功能;

 

https://github.com/marcuswestin/store.js

查看文档中的API

store.set('user',{name:'marcus'})

store.get('user')   #类似pydict,支持默认值

store.clearAll()

store.each(function(value,key) {

         console.log(key,'==',value)

})   #迭代,注意keyvalue的顺序,是反的

var store = require('store')   #import store from 'store',用新语法得用babel转译

 

$ npm i store --save

……

+ store@2.0.12

added 69 packages in 29.036s

 

例:

E:\git_practice\js\react-mobx-starter-master\test.js,注意路径;

let store = require('store');

 

store.set('user', 'jowin');

console.log(store.get('user'));

 

store.remove('user');

console.log(store.get('user'));

console.log(store.get('user', 'default_value'));

 

store.set('user', {name: 'jowin', age: 28});

console.log(store.get('user').name, store.get('user').age);

 

store.set('school', {name: 'magedu'});

 

store.each(function(value, key) {

    console.log(key, '==', value)

});

输出:

jowin

undefined

default_value

jowin 28

user == { name: 'jowin', age: 28 }

school == { name: 'magedu' }

 

 

 

date = new Date();

console.log(date);

console.log(date.valueOf());

输出:

2018-11-15T01:13:11.079Z

1542244391079

 

 

 

m = new Map();

 

m.set(1,'a');

m.set(2,'b');

m.set(3,'c');

console.log(m);

 

let t = m.forEach((value,key) => console.log(key, '==', value));

console.log(t);

t = [...m.values()].map(item => item + 1);

console.log(t);

 

k = [...m.keys()].map(item => item + 1);

console.log(k);

输出:

Map { 1 => 'a', 2 => 'b', 3 => 'c' }

1 '==' 'a'

2 '==' 'b'

3 '==' 'c'

undefined

[ 'a1', 'b1', 'c1' ]

[ 2, 3, 4 ]

 

 

 

 

 

 



推荐阅读
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了Python字典视图对象的示例和用法。通过对示例代码的解释,展示了字典视图对象的基本操作和特点。字典视图对象可以通过迭代或转换为列表来获取字典的键或值。同时,字典视图对象也是动态的,可以反映字典的变化。通过学习字典视图对象的用法,可以更好地理解和处理字典数据。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
author-avatar
峰的紫色摩天轮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有