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中完成某个任务 ...
随机推荐
- 2019.9.25使用BP和Hydra爆破相关的服务
使用BP和Hydra爆破相关的服务. Hydra:九头蛇,开源的功能强大的爆破工具,支持的服务有很多,使用hydra爆破c/s架构的服务.使用bp爆破web登录端口. dvwa:web应用程序漏洞演练 ...
- 002-loganalyzer装完报错no syslog records found
1.登录mysql查看库Syslog中的表SystemEvents;是否有返回数据 # select * from Syslog.SystemEvents; #又返回数据说明rsyslog配置正确, ...
- Python测开面试题之装饰器
Python的装饰器是面试常被问到的问题之一,在面试Python测试开发时被问到的概率不低于70%,那么装饰器的原理是什么,怎么快速写出一个装饰器呢,接下来我们详细讲解装饰器的实现方法. Python ...
- SQL truncate 、delete与drop区别(转)
相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1. t ...
- CUDA升级后
打开工程文件.vcxproj,找到 <Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 10.0.props" ...
- LogHelper
原文链接 public class LogHelper { static string strLogCOMPath = Directory.GetCurrentDirectory() + " ...
- 在服务端中,读取properties资源文件中的数据
1.获取到资源的路径 2.读取数据 //properties文件对象 Properties properties = new Properties(); //通过HttpServletRequest ...
- Nginx虚拟主机多server_name的顺序问题
Nginx虚拟主机多server_name的顺序问题 大 | 中 | 小 [ 2008-11-28 11:27 | by 张宴 ] [文章作者:张宴 本文版本:v1.0 最后修改:2008.11. ...
- 轮子:读取config.ini文件
python: 把config.ini文件成map返回 def get_conf(conf_file): conf = {} ll=list(map(lambda x: x.replace('&quo ...
- 绑定与非绑定方法及反射,isinstance和issubclass内置函数
目录 绑定方法与非绑定方法 1.绑定方法 2.非绑定方法(staticmethod) isinstance和issubclass 内置函数 1.isinstance 2.issubclass 反射(面 ...