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. js中关于value的一个小知识点(value既是属性也是变量)

    今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻. [1]以下这种情况是常见情况,会弹出“测试内容” <input type="button" v ...

  2. 移动web开发之像素和DPR

    × 目录 [1]定义 [2]分类 [3]缩放[4]DPR 前面的话 像素在web开发中几乎天天用到,但到底什么是像素,移动端和桌面端的像素有区别吗,缩放对像素有影响吗,视网膜屏幕和像素有什么关系?关于 ...

  3. JSP网站开发基础总结《十三》

    继上一篇为大家补充过滤器类后,本篇为大家简单介绍一下如何实现验证码效果.验证码的作用是什么呢?1.防止恶意注册2.防止恶意提交3.防止盗取账户等等,总的来说验证码的存在就是为了,防止非人为的操作,不过 ...

  4. 【目录】C#搭建足球赛事资料库与预测平台与彩票数据分析目录

    本博客所有文章分类的总目录链接:本博客博文总目录-实时更新 1.彩票数据分析与预测 6.智彩足球技术研究团队成员介绍 5.关于组建“智彩足球技术研究团队”的说明 4.为什么选择玩足球彩票以及玩彩票的心 ...

  5. 那些年,在AngularJS的路上遇到的坑

    使用AngularJS这么久以来,遇到过一些坑,之前一直没有以书面的形式整理下,现在好好总结下,以供后面查备. 一.angular scope 在ng-if与ng-show下的区别(两者作用域的差别) ...

  6. Hadoop官方文档翻译—— YARN ResourceManager High Availability 2.7.3

    ResourceManager High Availability (RM高可用) Introduction(简介) Architecture(架构) RM Failover(RM 故障切换) Rec ...

  7. 转载-centos网络配置(手动设置,自动获取)的2种方法

    转载地址:http://blog.51yip.com/linux/1120.html 重新启动网络配置 # service network restart 或 # /etc/init.d/networ ...

  8. Git:错误:error:src refspec master does not match any

    新建立了一个远程仓库,想着把项目放上去.于是在项目目录上: git init 然后就添加远程库 git remote add origin xxxx.git 然后就想push: git push -u ...

  9. If WCF Service side and Client side config is different?!

    from stackoverflow http://stackoverflow.com/questions/4879310/when-setting-up-a-wcf-client-and-serve ...

  10. [译]学习IPython进行交互式计算和数据可视化(二)

    第一章:开始使用IPython 在本章中,我们首先进行一遍IPython的安装过程,在大概浏览一下IPython提供的功能.IPython提供了一个高度优化的Python控制台和Notebook.除此 ...