react综合案例-todolist、localstorage缓存数据
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缓存数据的更多相关文章
- [RN] React Native 使用 AsyncStorage 存储 缓存数据
React Native 使用 AsyncStorage 存储 缓存数据 AsyncStorage是一个简单的.异步的.持久化的Key-Value存储系统,它对于App来说是全局性的.这是官网上对它的 ...
- 夺命雷公狗-----React---22--小案例之react经典案例todos(完成数据的遍历)
在很多前端框架中todos都是一个小的参考例子,在react中当然也是不例外的,先来看看最终的效果先... 这个就是官方的例子,我们先来分析下他是由那及格组建组合成的... 再来分析下他是的数据最终是 ...
- 面localStorage用作数据缓存的简易封装
面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...
- 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法
072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...
- 070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据
070 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 02 综合案例-数组移位-从键盘接收数据 本文知识点:综合案例-数组移位-从键盘接收数据 说明:因为时间紧张 ...
- react第二十单元(react+react-router-dom+redux综合案例2)
第二十单元(react+react-router-dom+redux综合案例2) #课程目标 #知识点 #授课思路 #案例和作业
- react第十九单元(react+react-router-dom+redux综合案例1)
第十九单元(react+react-router-dom+redux综合案例1) #课程目标 复习 综合练习 实战能力 #知识点 react react-router redux #授课思路 #案例和 ...
- 使用React实现一个TodoList案例
1.效果图: 2.项目源码 3.源码 TodoList.js import React, { Component, Fragment } from 'react'; import TodoItem f ...
- springAop:Aop(Xml)配置,Aop注解配置,spring_Aop综合案例,Aop底层原理分析
知识点梳理 课堂讲义 0)回顾Spring体系结构 Spring的两个核心:IoC和AOP 1)AOP简介 1.1)OOP开发思路 OOP规定程序开发以类为模型,一切围绕对象进行,OOP中完成某个任务 ...
随机推荐
- 自学Python5.5-面向对象三大基本特征_继承
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...
- PHP强制修改返回的状态码
在最后的程序执行完毕之前,加入下列语句,即可实现所有的返回码都为200即使在服务器内部发生错误,会报500情况下只要加上register_shutdown_function函数的处理同样可以实现返回2 ...
- 第二章 Vue快速入门-- 16 vue中通过属性绑定为元素绑定style行内样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- java 观察这模式(发布订阅模式)
观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新. 发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息. 抽象 ...
- Acwing-102-最佳牛围栏(二分,实数)
链接: https://www.acwing.com/problem/content/104/ 题意: 农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过200 ...
- 利用rand7() 产生rand10()(腾讯)
题目1:已知rand7() 可以产生 1~7 的7个数(均匀概率),利用rand7() 产生rand10() 1~10(均匀概率) int rand10() { int temp; int te ...
- JZOJ5373【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
题目 分析 我们发现,如果[l,r]的异或和为k是真要求,有且仅当不存在[l,i]和[i,r]两个区间的异或和不为k. 我们用带权并查集了维护这些,但是,由于区间不连续,我们将点权移到边上,对于区间[ ...
- Python 操作 MySQL 数据库Ⅳ
执行事务 事务机制可以确保数据一致性. 事务应该具有4个属性:原子性.一致性.隔离性.持久性.这四个属性通常称为ACID特性. 原子性(atomicity).一个事务是一个不可分割的工作单位,事务中包 ...
- c++11:lambda表达式的使用
lambda表达式的一般形式: [capture list] (parameter list) -> return type{function body}; 其中,capture list (捕 ...
- node之events 模块,并通过实例化 EventEmitter 类来绑定和监听事件
例子来源:http://www.runoob.com/nodejs/nodejs-event-loop.html http://www.runoob.com/nodejs/nodejs-event.h ...