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(0);
        let list = JSON.parse(localStorage.getItem(key));
        list.map(function (value,key) {
            if(value.checked==false){
                count = count+1;
            }
        })
        return count;
    },
    countTrueNum(key){
        let count=new Number(0);
        let list = JSON.parse(localStorage.getItem(key));
        list.map(function (value,key) {
            if(value.checked==false){
                count = count+1;
            }
        })
        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==13){
            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,1);
        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;

注意:

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

原文地址:https://www.cnblogs.com/ywjfx/p/10421272.html

时间: 2024-08-30 14:50:23

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

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

面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但localStorage过于简单,没有任何管理和限制,因此封装了下面这个对象. 我的封装非常直观简单,比网上的一些晦涩的代码明显小巧精简实用.目前只自动回收过期或最后一次访问时间到现在的间隔最大的项,以后有时间,再把访问次数纳入到自动回收的算法中. window.MyCache = window.M

H5 localstorage本地缓存数据的封装以及在vue中的使用

vue中常用的 每次增加数据   要缓存                     每次删除数据也要缓存  storage.js 文件 然后某个页面需要本地存储,就需要用 import引入:import storage from './storage.js' App.vue页面: <template> <div id="app"> <input type="text" v-model='todo' @keydown="doAdd

Winform开发框架中的综合案例Demo

在实际的系统开发中,我们往往需要一些简单的的案例代码,基于此目的我把Winform开发框架中各种闪光点和不错的功能,有些是我们对功能模块的简单封装,而有些则是引入了一些应用广泛的开源组件进行集成使用,因此把它们做了一个Demo进行展示,以方便我们随时了解和参考,并能够快速应用相应的场景到具体的项目中. 1.闪屏展示界面及主体界面 在很多系统里面,提供一个设计不错的图片作为程序界面展示的效果是挺不错的,这个小程序也不例外,基本上整合了一些WInform界面常用的各种功能. 而整个案例的界面的界面以

[开源]jquery-ajax-cache:快速优化页面ajax请求,使用localStorage缓存请求

项目:jquery-ajax-cache 地址:https://github.com/WQTeam/jquery-ajax-cache     最近在项目中用到了本地缓存localStorage做数据的缓存. 1.简单说下localStorage localStorage和cookies相比,在浏览器中存储的容量更大.另外最大的特点是不会附带在http请求中传给后台,不会像cookies一样导致http头部变大影响传输性能.基于这个原因,localStorage适合缓存一些常用的数据,无需平凡的

DOM综合案例、SAX解析、StAX解析、DOM4J解析

今日大纲 1.DOM技术对xml的增删操作 2.使用DOM技术完成联系人管理 3.SAX和StAX解析 4.DOM4J解析 5.XPATH介绍 1.DOM的增删操作 1.1.DOM的增加操作 /* * 演示使用dom技术给xml中添加标签 * <book> <name id="b001">SSH</name> <author>老于</author> <price>152</price> </boo

JavaScript:综合案例-表单验证

综合案例:表单验证 开发要求: 要求定义一个雇员信息的增加页面,例如页面名称为"emp_add.htmnl",而后在此页面中要提供有输入表单,此表单定义要求如下: .雇员编号:必须是4位数字,按照正则进行验证: .雇员姓名:不能为空: .雇员职位:不能为空: .雇员日期:按照"yyyy-mm-dd"的格式编写,按照正则进行验证: .基本工资:按照小数编写,小数为最多2位,按照正则进行验证: .佣金:难找小数编写,小数位数最多2位,按照正则进行验证. 具体步骤: 第一

XML学习总结-DOM和SAX解析-综合案例-(四)

============DOM解析    vs   SAX解析             ======== DOM解析 SAX解析 原理: 一次性加载xml文档,不适合大容量的文件读取 原理: 加载一点,读取一点,处理一点.适合大容量文件的读取 DOM解析可以任意进行增删改成 SAX解析只能读取 DOM解析任意读取任何位置的数据,甚至往回读 SAX解析只能从上往下,按顺序读取,不能往回读 DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单. S

Oracle Coherence中文教程十四:缓存数据来源

缓存数据来源 本章提供了用于缓存数据源使用作为临时记录系统的连贯性.本章包括样品和实施注意事项. 本章包含以下各节: 的缓存数据来源概述 选择一个高速缓存策略 创建一个缓存存储实现 在缓存存储实施堵漏 样品的缓存存储 可控的缓存存储范例 实施注意事项 14.1缓存数据源概述 Coherence支持透明,读/写缓存的任何数据源,包括数据库,Web服务,打包应用程序和文件系统,数据库是最常见的使用案例.作为速记, "数据库"是用来形容任何后端数据源.有效的缓存必须同时支持密集只读和读/写操

C语言基础知识之综合案例(1)

1,在屏幕上显示信息. 最常见的显示信息的方式是使用库函数printf()和puts(). a,转义字符. b,转移说明符. printf()函数位于标准C语言库中,它是最通用的在屏幕上显示信息的方式. #include<stdio.h> void main() { //在屏幕上显示文本信息 very nice ! printf("very nice !"); //显示变量的值 int number = 10; /* 格式化字符串 格式化字符串指定如火如荼格式输出,由以下三