72react_高阶组件_LocalStorage
admin
2023-07-08 13:04:48
0

 

 

目录

高阶组件:... 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 ]

 

 

 

 

 

 


相关内容

热门资讯

美前副总统:共和党失去了方向,... 2026年是美国的中期选举年,共和党选情不利,可能在年底的选举中遭遇挫败。美国前副总统彭斯5月31日...
南枝原来去过中国?《给阿嬷的情... 《给阿嬷的情书》票房口碑双丰收,目前票房已突破13亿。凤凰卫视最新一期《问答神州》专访了该片导演蓝鸿...
法国海军扣押一艘俄“影子舰队”... 近日,法国海军在大西洋海域扣押了一艘据称从俄罗斯摩尔曼斯克出发的油轮,引发俄方强烈不满。俄新社6月1...
凤凰晚报丨面粉染头模仿黄仁勋,... 今日人物【面粉染头模仿黄仁勋,农村青年走红后称遭“法务”警告】“先赔偿5000元肖像侵权使用费,再删...
亲特朗普极右派候选人领跑哥伦比... 【文/观察者网 熊超然】当地时间5月31日,哥伦比亚总统选举拉开帷幕,首轮投票计票工作已完成逾99%...
2026年度网络举报系列宣传活... 5月28日至29日,以“每一件举报,都是共治的力量——豫你e行 同心护网”为主题的2026年度网络举...
中原首例帝企鹅DNA性别鉴定!... 近日,郑州海昌海洋公园正式对外公布中原首对人工繁育的帝企鹅萌宝的DNA性别鉴定报告。这是中原首个将 ...
我国科学家为细胞信号“导航”开... 新华社济南5月31日电(记者张力元)人体细胞犹如一座精密的通信城市,每天都有大量“指令”穿梭传递,调...
极端大风突袭哈尔滨!过山车停摆... 极目新闻记者 詹钘5月31日,受强对流天气影响,哈尔滨国际会展中心体育场相关设施受到损坏,原计划当晚...
三原电缆取得电缆接头连接用防护... 国家知识产权局信息显示,上海三原电缆附件有限公司取得一项名为“一种电缆接头连接用防护结构”的专利,授...