react实例之todo,

做一个实时响应的列表操作

在所有的mvc框架中,最常见的例子不是hello world,而是todo,由于reactjs的简单性,在不引用flux和redux的情况下,我们也一样可以做出很好的效果来。

本文的例子在react中国首页中可以看到,它的源代码请点击这里https://github.com/tianxiangbing/react-todo

首先我们看下截图的效果:

由上图,我们可以分析下它一共有哪些功能点:

  1. 有一个添加的文本框,下面有个实时显示输入结果的div层。(这里这样做的目的就是想说react实现mvvm也是相当简单的)
  2. 下面有一个列表显示添加的结果
  3. 每一个列表项有一个删除功能
  4. 每一项还有一个点击进入文本编辑,失去焦点自动保存的功能

  大致就是上面的4个功能点了,与react官方的todo例子略有不同,还有点不同的是我使用的是es6语法编写,为什么要这样,这是趋势,所以在我做的react中国这个网站里的例子也大多使用es6语法写jsx文件

  下面就是具体的写代码的时间了,首先我们先把界面排出来,html代码写完

 render(){
return (
<div>
<div><input type="text" value={this.state.title} onKeyDown={(e)=>{e.keyCode==13?this.addHandle(e):undefined}} placeholder="请输入标题" onChange={this.changeHandle.bind(this)}/><button onClick={this.addHandle.bind(this)}>添加</button></div>
<div className="preview">{this.state.title}</div>
<div className="list">
{
this.state.list.map((item,index)=>{
return (
<a key={index}>
{item.edit?<input type="text" onKeyDown={(e)=>{e.keyCode==13?this.toEdit(item):undefined}} onBlur={this.blurHandle.bind(this,item)} onChange={this.changeItem.bind(this,item)} value={item.title}/>:<span onClick={this.toEdit.bind(this,item)}>{item.title}</span>}
<button onClick={this.delHandle.bind(this,index)}>删除</button>
</a>
)
})
}
</div>
</div>
);
}

  从这里,我们大致可以看出来,所有的动态改变都是通过state的,我们只需要绑定state到html里,你在其他地方state的变化就会反应在Html里了,这一块就类似于ng的mvvm了,但react的state需要用 this.setState({}) 的方式触发, 这个不是局限性,而统一了入口管理,我觉得它比ng的直接属性触发或者emberjs的所有对象都有set和get方法要更优,简单之美嘛。

  然后就是填充上面的几个事件了:

 addHandle(e){
let list = this.state.list;
list = list.concat([{title:this.state.title}]);
this.setState({list:list,title:''});
}
changeHandle(e){
this.setState({title:e.target.value});
}
delHandle(index){
console.log(index)
let list = this.state.list;
list.splice(index,1);
this.setState();
}
changeItem(item,e){
item.title = e.target.value;
this.setState();
}
blurHandle(item){
item.edit = !item.edit;
this.setState();
}
toEdit(item){
item.edit=!item.edit;
console.log(this.refs.txtedit)
this.setState();
}

  这里的每个方法都简单到爆炸,都只是对state里的某一个项做了修改,由数据来驱动显示,这不就是框架的优点吗?最后,我们还要记得给state一个初始值:

 constructor(props){
super(props);
this.state={list:[{title:"点我进入编辑模式"}],title:''};
}

  好了,整个reactjs的todo例子就这样完成了,是不是很easy?如果你还有点看不太懂的话,那可能是你的代码的顺序不对,请从下往上再看一遍就好了,谢谢!

参考资料:react中国 、emberjstodo

react实例之todo,做一个实时响应的列表操作的更多相关文章

  1. 做一个vue的todolist列表

    <template> <div id="app"> <input type="text" v-model="todo&q ...

  2. 使用React并做一个简单的to-do-list

    1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其virtual ...

  3. 4-13 Webpacker-React.js; 用React做一个下拉表格的功能: <详解>

    Rails5.1增加了Webpacker: Webpacker essentially is the decisions made by the Rails team and bundled up i ...

  4. Vue.js 入门:从零开始做一个极简 To-Do 应用

    Vue.js 入门:从零开始做一个极简 To-Do 应用 写作时间:2019-12-10版本信息:Vue.js 2.6.10官网文档:https://cn.vuejs.org/ 前言  学习 Vue ...

  5. React学习笔记-1-什么是react,react环境搭建以及第一个react实例

    什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...

  6. 通过Gulp使用Browsersync实现浏览器实时响应文件更改

    Gulp是什么鬼 Browsersync又是什么鬼 如何安装使用Browsersync 安装 使用 效果图 参考 Gulp是什么鬼 Gulp是一种基于node.js的构建工具,有关构建工具的概念请移步 ...

  7. 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...

  8. 用Socket做一个局域网聊天工具(转)

    原文:http://www.cnblogs.com/technology/archive/2010/08/15/1799858.html 程序设计成为简单的服务端和客户端之间的通信, 但通过一些方法可 ...

  9. 用Vue开发一个实时性时间转换功能,看这篇文章就够了

    前言 最近有一个说法,如果你看见某个网站的某个功能,你就大概能猜出背后的业务逻辑是怎么样的,以及你能动手开发一个一毛一样的功能,那么你的前端技能算是进阶中高级水平了.比如咱们今天要聊的这个话题:如何用 ...

随机推荐

  1. javase基础复习攻略《四》

    本篇内容重点介绍JAVA中的异常处理机制,什么是JAVA异常?JAVA异常是JAVA提供的用于处理程序中错误的一种机制.所谓错误就是指在程序的运行过程中出现的一些异常事件(如:0溢出,数组下表越界,所 ...

  2. 微信内置浏览器WebApp开发,踩坑 · Issue #31 · maxzhang/maxzhang.github.com · GitHub

    最近花6天时间完成了一个七夕的小活动,是一个简单的WebApp.由于我前期对面向微信的Web开发评估不足,导致开发过程十分艰难.写这篇文章总结下,惊醒自己未来不要再犯这样的错误. 问题: 1. 有些比 ...

  3. jQuery 事件

    什么是事件 页面对不同访问者的响应叫做事件. 事件处理程序指的是当 HTML 中发生某些事件时所调用的方法. 常见 DOM 事件: 鼠标事件 键盘事件 表单事件 文档/窗口事件 click keypr ...

  4. [logstash-input-log4j]插件使用详解

    Log4j插件可以通过log4j.jar获取Java日志,搭配Log4j的SocketAppender和SocketHubAppender使用,常用于简单的集群日志汇总. 最小化的配置 input { ...

  5. html/css/js小技巧实例

    一些学习中碰到的小技巧 让div自动撑起来: .clearfix:after{ content: "."; clear: both; display: block; visibil ...

  6. .NET平台下IIS7.5+无后缀名伪静态实现办法

    首先新建一个应用程序池,名称任意,比如:nettest,托管管道模式先暂时设置为集成模式,等下面的一系列设置完成之后再设置成经典模式: 部署好站点,并将此站点的应用程序池设置为nettest; 选中站 ...

  7. 分享关于Entity Framework 进行CRUD操作实验的结果

    我们在使用Entity Framework框架进行CRUD时,经常会出现各种各样的错误,下面请看我的实验结果. 以下是只用一个上下文对象进行操作: 第一次: BlogDbContext blog = ...

  8. Spring MVC 对于@ModelAttribute 、@SessionAttributes 的详细处理流程

    初学 Spring MVC , 感觉对于 @ModelAttribute 和 @SessionAttributes 是如何被Spring MVC处理的,这一流程不是很清楚, 经过Google资料,有了 ...

  9. 为什么我会选IT【这几年是怎么过来的】

    导火线 晚上跟高中同学说我近来的状况,无意中他提到:“如果当初没意外话,今年估计你就是一名老师了吧”.这让我很是怀念以前的日子,这四年来过的很快,开始想着当初是怎么过来的 : 高考 本人英语不佳,高考 ...

  10. WIN-CE系统架构

    WIN-CE 系统架构分为素部分:硬件层.OEM 层.操作系统层.应用层 http://hovertree.com/hvtart/bjae/oy9pqb94.htm 硬件层: 由CPU .存储器.I/ ...