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 ...
随机推荐
- Spring 缓存注解 SpEL 表达式解析
缓存注解上 key.condition.unless 等 SpEL 表达式的解析 SpEl 支持的计算变量: 1)#ai.#pi.#命名参数[i 表示参数下标,从 0 开始] 2)#result:Ca ...
- 2018-5 - 凉经 - 乐糖游戏 - PHP 开发实习生
收到面试通知当天因为学校出事要求我明天必须回去,所以就买当晚的火车票,然后跟公司说学校有事明天没法去面试了,公司人事比较好给我安排到当天下午面试.公司规模不是很大,但位置好下了地铁到,可能因为招的是实 ...
- lua源码学习篇二:语法分析
一步步调试,在lparser.c文件中luaY_parser函数是语法分析的重点函数,词法分析也是在这个过程中调用的.在这个过程中,用到一些数据结构,下面会详细说. Proto *luaY_parse ...
- 安装ssh
1.win10 安装ssh sudo apt-get remove --purge openssh-server ## 先删ssh sudo apt-get install openssh-serve ...
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_18maven的java工程取mysql数据库
使用maven创建ava功能,然后读取数据库做一个测试. 我们做的持久层,没有和页面有交互,只做一个java工程就可以了 创建的是java工程,用不用骨架都可以.这里不使用骨架,直接next 直接fi ...
- Scala的to和until
object test03 { def main(args: Array[String]): Unit = { //to 每次迭代为1 val to1= to print("to1" ...
- 路由器桥接时,为什么要关闭 DHCP 服务器?
问:看网上的一些教程,路由器设置无线桥接的时候,副路由器中的 DHCP 服务器需要关闭,请问这是为什么? 答:两个路由器无线桥接时,之所以要关闭副路由器的 DHCP 服务器,是为了避免 IP 地址错误 ...
- springboot+dubbo基于zookeeper快速搭建一个demo
由于小编是在windows环境下搭建的,故该示例均为在windows下操作,这里只是提供一个快速搭建思路,linux操作也基本上差不多. 首先本示例的dubbo是基于zookeeper发布订阅消息的, ...
- [百家号]APT组织简介2019
5家新APT组织被披露,2019是“后起之秀”的天下? https://baijiahao.baidu.com/s?id=1621699899936470038&wfr=spider& ...
- BindWeb - Bind智能DNS管理系统介绍
2019-05-08 演示网站: https://bindw.cdneks.com demo/demo 2018-11-27 修改部署架构,取消网络共享存储设备,在每台BIND服务器启用NFS4并仅向 ...