TodoList案例
我们今天模仿ToDoList进行一个简单的增,删,改,查的操作
可参考官网 http://www.todolist.cn/
下边直接上代码
import React from 'react';
class App extends React.Component{
//构造函数
constructor(){
super()
this.state={
arry:[], //展示列表
str:'' //记录输入框的值
}
};
//加载时对数组进行操作
componentWillMount(){
// 获取本地数据赋值给myArry
var myArry= window.localStorage.getItem('myArry')
//判断myArry是否是空的,如果myArry是空的,就让它等一个空数组
if(myArry == null || myArry ==''){
myArry=[]
//如果myArry不是空的,拿到的数据是字符串需要通过split进行转换成数组
}else{
myArry = myArry.split(',')
}
this.setState ({
//转换过的数组赋值给arry
arry:myArry
})
};
//按钮点击事件方法
btn(){
var val = this.refs.val.value;
if(this.refs.val.value ===''){
alert("请输入")
}else{ this.setState({
//运用扩展运算符添加数据到arry
arry:[...this.state.arry,val]
},function(){
// 更新本地数据
window.localStorage.setItem('myArry',this.state.arry)
})
}
// 输入框值清空
this.refs.val.value='';
}
render(){
return(
<React.Fragment>
<input type='text' ref='val' onKeyDown={(e)=>{
//键盘事件
if(e.keyCode===13){
// 调用上面添加的函数
this.btn()
}
}} />
<button onClick={this.btn.bind(this)}>提交</button>
<ul>
{/* 对数组进的遍历渲染 */}
{this.state.arry.map((m,i)=>{
return(
// key属性为唯一值,没有该属性,浏览器会报警告信息,在做添加操作时会出bug
<li key={i}>{m}
<button onClick={()=>{
//通过prompt弹框获取要修改的内容
var prompt = window.prompt()
// 判断是不是确认修改
if(prompt != null){
var list = this.state.arry
//在arry数组中找到下标i设置修改个数为1,修改的内容为list
list.splice(i,1,prompt)
this.setState({
//修改过后把list值重新赋给arry
arry:list
},function(){
window.localStorage.setItem('myArry',this.state.arry)
})
} }}>修改</button>
<button onClick={()=>{
// 对数组进行截取下标为i 删除个数为1
this.state.arry.splice(i,1)
this.setState({
//截取过后把list值重新赋给arry
arry:this.state.arry
},function(){
window.localStorage.setItem('myArry',this.state.arry)
})
}}>删除</button> </li>
)
})}
</ul>
</React.Fragment>
)
}
} export default App;
我们看一下效果
TodoList案例的更多相关文章
- 2-3 用组件改写Todolist案例
编写组件来改写2-2的Todolist案例
- vue - Vue脚手架/TodoList案例
今天做了一个案例,可以好好做做能够将之前的内容结合起来,最主要的是能对组件化编码流程有一个大概的清晰认知,这一套做下来,明天自己再做一遍复习一下,其实组件化流程倒是基本上没什么问题了,主要是很多vue ...
- 2-4 完整Todolist案例
在2-3 的基础上继续,综合前面的Todolist编写一个完整的案例,实现基本的输入内容,添加内容,点击删除内容 稍微讲解54行代码 splice()的用法
- Vue框架(二)——Vue指令(v-once指令、v-cloak指令、条件指令、v-pre指令、循环指令)、todolist案例、Vue实例(计算、监听)、组件、组件数据交互
Vue指令 1.v-once指令 单独使用,限制的标签内容一旦赋值,便不可被动更改(如果是输入框,可以主动修改) <!DOCTYPE html> <html lang=" ...
- 通过TodoList案例对比Vue.js的MVVM设计模式与JQuery的MVP设计模式
Vue MVVM设计模式: 在使用vue进行编程时,不会再涉及到DOM的操作,取而代之的是修改数据层,当把数据进行变更的时候,vue之中它的底层会自动的根据数据的不同帮助我们去重新渲染页面. 编码时不 ...
- Vue完成TodoList案例
写一个简单的TodoList的更实用(文末有彩蛋). 一,使用VUE-CLI脚手架快速搭建一个框架 利用VUE-CLI来自动生成我们项目的前端目录及文件,方法: npm install -g vue- ...
- 使用React实现一个TodoList案例
1.效果图: 2.项目源码 3.源码 TodoList.js import React, { Component, Fragment } from 'react'; import TodoItem f ...
- 2-2 Todolist简单案例
用v-on,v-for,v-model实现简单的Todolist案例
- react综合案例-todolist、localstorage缓存数据
1.工具类storage.js var app ={ set(key,value){ localStorage.setItem(key,JSON.stringify(value)); }, get(k ...
随机推荐
- mysql查询时特殊字符转译
commons.lang String value = StringEscapeUtils.escapeSql(searchRequest.getSearchValue());
- redis--迁库操作
如果碰到redis库要迁移(之前的redis用作他用)或者备份用,就需要操作redis迁移 import redis def qianyi(k=None,v=None,name=None): r1 = ...
- Microsoft.Office.Interop.Excel Find 操作
public void SearchLoactions(string filepath, int start, int end ,string expectvalue) { if (end >= ...
- 《Using Python to Access Web Data》 Week5 Web Services and XML 课堂笔记
Coursera课程<Using Python to Access Web Data> 密歇根大学 Week5 Web Services and XML 13.1 Data on the ...
- JavaScript —— 用法 输出
用法 必须在<script>标签内 可以在<body>和<head>部分中 不限数量 <script> ... </script> 即可,不 ...
- Matlab——图形绘制——二维平面图形
二维平面图形 hold on ————在已画好的图形上添加新的图形 plot 是绘制一维曲线的基本函数,但在使用此函数之前,我们需先定义曲线上每一点的x 及y 座标.下例可画出一条正弦曲线: > ...
- tensorflow学习之tf.truncated_normal和tf.random_noraml的区别
tf版本1.13.1,CPU 最近在tf里新学了一个函数,一查发现和tf.random_normal差不多,于是记录一下.. 1.首先是tf.truncated_normal函数 tf.truncat ...
- 网络编程.TCP分块接收数据(AIO)(IOCP)
1.前提:每次投递的接收缓冲区 在它返回后 就不再用它进行2次投递了 于是 接收缓冲区 在返回的时候,数据都是 从接收缓冲区的偏移[0]处开始填充的,且 接收缓冲区 可能被填满 也可能未被填满. 1. ...
- python 开启进程两种方法 multiprocessing模块 介绍
一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进 ...
- Java第二周总结
一.Java 基础程序设计 第一章: (1)在Java中源文件的扩展名为.java,编译Java源程序文件产生相应的字节码文件扩展名为.class (2)public class定义要求类名称保持一致 ...