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 ...
随机推荐
- Django学习之Cookie和Session
一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...
- ubuntu的无线网无法连上
自己的笔记本可以连上wireless,但是实验室的台式机无法连上. 有无线显示,就是无法连上. 后来把连在机箱上的网线拔了以后可以连无线了.如果有网线连接,系统优先会选择有线的上网.
- 设计模式(5): vue 不监听绑定的变量
概述 最近最近做项目的时候总会思考一些大的应用设计模式相关的问题,我把自己的思考记录下来,供以后开发时参考,相信对其他人也有用. 绑定变量 一般情况下,如果我们需要在组件中使用某个变量,会这么使用: ...
- 原生js去除行内样式
概述 今天我用js给dom元素设置样式,碰到了一些问题,记下来供以后开发时参考,相信对其他人也有用. 心得 js加上class: $dom.classList.add('some-class'); j ...
- 阶段3 1.Mybatis_07.Mybatis的连接池及事务_2 连接池介绍
- 系统分析与设计HW5
个人作业 领域建模 a. 阅读 Asg_RH 文档,按用例构建领域模型. 按 Task2 要求,请使用工具 UMLet,截图格式务必是 png 并控制尺寸 说明:请不要受 PCMEF 层次结构影响.你 ...
- 【java】的传值方式
[java]的传值方式 当你问大多数程序员Java是传值还是传引用的时候,你可能会得到两种答案之一: (1)Java传递原始类型数据时使用的是传值方式:传递对象时则使用传引用方式:String类型的数 ...
- paramiko远程连接linux服务器进行上传下载文件
花了不少时间来研究paramiko中sftpclient的文件传输,一顿操作猛如虎,最后就一直卡在了路径报错问题,疯狂查阅资料借鉴大佬们的心得,还是搞不好,睡了个午觉醒来,仔细一看原来是指定路径的文件 ...
- Grafana配置文件
配置文件位置 /usr/local/opt/grafana/share/grafana/default.ini /usr/local/etc/grafana/grafana.ini 配置文件调用顺序 ...
- 开篇——从程序员到IT经理
2002年~2005年我在广州的广东水力电力职业技术学院求学,主修网络工程.求学期间,我从事最多的就是玩游戏,当时就是玩MU和CS,所以有一门编程课叫C语言的“肥佬”(广东话)了,要补考,没办法,于是 ...