1、工具类storage.js

var app ={
set(key,value){
localStorage.setItem(key,JSON.stringify(value));
},
get(key){
return JSON.parse(localStorage.getItem(key));
},
delete(key){
localStorage.removeItem(key);
},
countFalseNum(key){
let count=new Number();
let list = JSON.parse(localStorage.getItem(key));
list.map(function (value,key) {
if(value.checked==false){
count = count+;
}
})
return count;
},
countTrueNum(key){
let count=new Number();
let list = JSON.parse(localStorage.getItem(key));
list.map(function (value,key) {
if(value.checked==false){
count = count+;
}
})
return count;
}
}
export default app;

2、todolist案例实现

import React from 'react';
import storage from '../modules/storage';
class Todolist1 extends React.Component{
constructor(props){
super(props);
this.state={
list:[],
finishList:[
/* {
title:"录制java",
checked:true
},
{
title:"录制react",
checked:false
},
{
title:"录制python",
checked:true
}*/
]
};
} //生命周期函数 页面加载就会触发
componentDidMount(){
//获取缓存的数据
let todoList = storage.get("TodoList");
if(todoList){
this.setState({
finishList:todoList
})
}
}
addData=(e)=>{
if(e.keyCode==){
let title=this.refs.title.value;
let tempList = this.state.finishList;
tempList.push({
title:title,
checked:false
})
this.setState({
list:tempList
});
//增加框设置为空
this.refs.title.value="";
//缓存数据,使用localStorage,而将一个对象转为字符串使用JSON.stringify()函数
storage.set("TodoList",tempList);
}
} changeState=(key)=>{
let templist =this.state.finishList;
templist[key].checked =!templist[key].checked;
this.setState({
list:templist
});
storage.set("TodoList",templist);
}
deleteData=(key)=>{
let templist =this.state.finishList;
templist.splice(key,);
this.setState({
list:templist
})
storage.set("TodoList",templist);
} render(){
return (
<div>
Todolist index
<h2>Todolist演示</h2>
<input ref="title" onKeyUp={this.addData}/>
<hr/>
<h2> </h2>
<h2>正在进行</h2> <hr/>
{
this.state.finishList.map( (value,key)=> {
if(value.checked==false){
return(
<li key={key}>
<input type="checkbox" checked={value.checked} onChange={this.changeState.bind(this,key)}/>{value.title}
---<button onClick={this.deleteData.bind(this,key)}>删除</button>
</li>
)
}
})
}
<h2>已完成事项</h2>
{
this.state.finishList.map( (value,key)=> {
if(value.checked==true){
return(
<li key={key}>
<input type="checkbox" checked={value.checked} onChange={this.changeState.bind(this,key)} />{value.title}
---<button onClick={this.deleteData.bind(this,key)}>删除</button>
</li>
)
}
})
}
<hr/> </div>
)
}
}
export default Todolist1;

3、app.js加载该组建

import React, { Component } from 'react';
import './assets/css/App.css';
import Todolist1 from './components/Todolist1';
class App extends Component {
render() {
return(
<div>
你好
<Todolist1/>
</div>
)
}
}
export default App;

注意:

、localStorage的使用
、this对象的指向

react综合案例-todolist、localstorage缓存数据的更多相关文章

  1. [RN] React Native 使用 AsyncStorage 存储 缓存数据

    React Native 使用 AsyncStorage 存储 缓存数据 AsyncStorage是一个简单的.异步的.持久化的Key-Value存储系统,它对于App来说是全局性的.这是官网上对它的 ...

  2. 夺命雷公狗-----React---22--小案例之react经典案例todos(完成数据的遍历)

    在很多前端框架中todos都是一个小的参考例子,在react中当然也是不例外的,先来看看最终的效果先... 这个就是官方的例子,我们先来分析下他是由那及格组建组合成的... 再来分析下他是的数据最终是 ...

  3. 面localStorage用作数据缓存的简易封装

    面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...

  4. 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法

    072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...

  5. 070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据

    070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据 本文知识点:综合案例-数组移位-从键盘接收数据 说明:因为时间紧张 ...

  6. react第二十单元(react+react-router-dom+redux综合案例2)

    第二十单元(react+react-router-dom+redux综合案例2) #课程目标 #知识点 #授课思路 #案例和作业

  7. react第十九单元(react+react-router-dom+redux综合案例1)

    第十九单元(react+react-router-dom+redux综合案例1) #课程目标 复习 综合练习 实战能力 #知识点 react react-router redux #授课思路 #案例和 ...

  8. 使用React实现一个TodoList案例

    1.效果图: 2.项目源码 3.源码 TodoList.js import React, { Component, Fragment } from 'react'; import TodoItem f ...

  9. springAop:Aop(Xml)配置,Aop注解配置,spring_Aop综合案例,Aop底层原理分析

    知识点梳理 课堂讲义 0)回顾Spring体系结构 Spring的两个核心:IoC和AOP 1)AOP简介 1.1)OOP开发思路 OOP规定程序开发以类为模型,一切围绕对象进行,OOP中完成某个任务 ...

随机推荐

  1. Arch Linux 安装 ibus-rime

    参考网站 default.custom.yaml 在方案選單中添加五筆.雙拼 rime-wubi 操作方式 # 删除原rime(可选) sudo pacman -Rs ibus-rime ibus-t ...

  2. JetBrains IDEA Web开发简单配置

    很早前因为使用了一年的MyEclipse,不想更换其他的IDE工具,是因为各项配置,以及快捷键等.前段时间更换了IDEA工具,初步了解了一些功能,包括快捷,调试,配置,都很优于MyEclipse.但是 ...

  3. 10个不为人知的 Python 冷知识

    转载: 1. 省略号也是对象 ...这是省略号,在Python中,一切皆对象.它也不例外. 在 Python 中,它叫做 Ellipsis . 在 Python 3 中你可以直接写…来得到这玩意. 而 ...

  4. monkey自定义脚本

    自定义脚本稳定性测试 常规的monkey是执行随机的事件流,如果想让monkey测试某个特定的场景,这个时候需要自定义脚本. 用户需要先笔记好脚本再存放在手机上,通过启动monkey -f参数调用脚本 ...

  5. CH5101 LICS//hdu5904 LICS

    恭喜我已经正式沦为pj组选手QwQ 标题两个题其实不一样的.这是ch   这是hdu 一.CH上的:裸题,求LICS.n<=3000 经典普及组dp题,题解烂大街了.所以对于这题,只讲细节: $ ...

  6. 兼容系列-IE678的兼容

    1. 最简单的CSS Hack 区分 IE6 . IE7 .IE8 css .color{ background-color: #CC00FF; /*所有浏览器都会显示为紫色*/ background ...

  7. Python实现ANSI文件转UTF-8

    ANSI编码的文件转为UTF-8编码的文件. # ANSI文件转UTF-8 import codecs import os # 文件所在目录 file_path = "H:\Python\S ...

  8. 如何开始使用 Akka

    如果你是第一次开始使用 Akka,我们推荐你先运行简单的 Hello World 项目.情况参考  Quickstart Guide 页面中的内容来下载和运行 Hello World 示例程序.上面链 ...

  9. 2018中国大学生程序设计竞赛 - 网络选拔赛 Find Integer

    Find Integer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  10. TTTTTTTTTTTTT poj 3057 Evacuation 二分图匹配+bfs

    题意:见挑战230页 #include <iostream> #include <cstdio> #include <cstring> #include <c ...