从0开始学习react(三)
这次我们来讲解第三节知识,考虑了下,先不去讲什么理论了,毕竟网上一搜一大堆,而且理论真心看不太懂啊!!!
今天我们就直接上实例喽!
大家HIGH起来!!!(想了好久,还是没舍得删这句话)
1.根据下图配置自己的文件
2.我们先用原始方法
额,忘记告诉大家做什么项目了,那就在这补上吧,咱们先做一个小Demo,既然react是FB的,那我们就做个评论框好了。
搭建一个跟这个页面一样的模型,当然你要做的更好看,就按你的来吧!
我们考虑一下,要是按照原始的方法来怎么写?
var container = document.querySelector(".container");
var mytext = document.querySelector("textarea");
var btn = document.querySelector(".btn");
var Thtml;
btn.onclick = function(){
Thtml = mytext.value;
var newNode = document.createElement("p");
newNode.innerHTML = Thtml;
container.appendChild(newNode);
mytext.value = '';
};
写完后应该是这样的:
在下面的输入框输入,点击POST,则上面的div中就添加一条(至于样式就不要纠结了哈)
3.React方法
我们使用react来达到同样的效果。
var TweetBox = React.createClass({
render: function() {
return (
<div className="main">
<div className="container"></div>
<div>
<textarea></textarea>
<input type="button" className="btn" value="Post"/>
</div>
</div>
);
}
});
React.render(
<TweetBox />,
document.body
);
这里要注意两点:
1. 很多文档都是从内部引用的,这里专门从外部引用,在引用时一定要在<script>标签里注明类型
2.React中元素的class需要写成className
3.请规范你的代码输入(这句话有点装13了),单标记标签后面一定要拿" / "封闭,别怪我没给颜色标注啊!
同样的,我们获得了与用html代码输入一样的内容:
接下来我们来编写功能,这里大家最好先去react官网将所有api看一遍,这样看下面的内容能更快的了解。
4.React编写详解
我个人理解的就是react是将所有大的东西细分成小的组件,然后再拼接起来(六神合体雷神王,呜呜呜呜呜...)
我们来简单分析一下,这个功能大约能分成几部分。
应该是这样三部分是吧...
所以我们在编写时,也应该分为三部分,所以我们的示例代码应该变成这样:
其实这里的Listdiv就相当于
<div class="container"></div>
而Editdiv就是
<div>
<textarea></textarea>
<input type="button" class="btn" value="Post">
</div>
同样的他们被class名为main的div包裹。
下面我们就来编写里面的组件,不过在那之前我们先将当前初始状态处理一下:
好的,虽然有注释,但我们还是逐行翻译一下:
getInitialState,用于定义初始状态,也就是一个对象,这个对象可以通过 this.state 属性读取,也就是我们例子中的this.state.data(todo),todo是自己命名的一个存储名,大家自己随便取啊(避开关键字)
handleChange(这个名字也是自己随便取的),这个方法是用来跟踪数据的变化,将这个方法绑定到onChange(名字随便取)里
我们开始定义子组件吧:
Editdiv:
这里我们看到了主要的方法handleAdd,我们就来分析一下:
preventDefault,阻止元素发生默认的行为
ref,React用来获取dom元素而添加的一个属性,给你需要获取的元素上面添加这个属性,通过ref的值来获取到这个元素,使用this.refs.xxx.getDOMNode方法
这里我们将取到的元素(textarea)的值放入newthing中
rows,获取到输入的值,这里用到了props方法(网上有很多关于props和state方法的用法,大家去看看,这个真的很重要,这里在讲解这个的话篇幅就太长了,需要的话,大家可以留言,我会专门抽出一个专题的)
在下面就是给input中添加onClick(驼峰式写法)方法,触发的函数就是我们刚编写的handleAdd
Listdiv:
这个组件就简单的多了,创建class名为container的div,再在里面添加一个遍历map方法,返回一个被P元素包裹的值
OK,这里我们就大功告成了,下面贴下全部代码:
var TweetBox = React.createClass({
// 初始化数据,data的数据由state来控制
getInitialState: function() {
return {
data: []
};
},
// 接收一个传入的数据,并将它实时更新到组件的 state 中,以便组件根据数据重新render
// 只要改变了 state ,react自动执行 render 计算
handleChange: function (rows) {
this.setState({
data: rows
});
},
render: function() {
return (
<div className="main">
{
/*展示框*/
}
<Listdiv todo={this.state.data}/>
{
/*输入框与提交按钮*/
} <Editdiv onAdd={this.handleChange} todo={this.state.data}/>
</div>
);
}
});
// 输入框与提交按钮
var Editdiv = React.createClass({
handleAdd: function (e) {
e.preventDefault();
// 通过 refs 获取dom元素,然后获取输入的内容
var inputDom = this.refs.inputnew.getDOMNode();
var newthing = inputDom.value.trim();
// 获取传入的TweetBox数据
var rows = this.props.todo;
if (newthing !== '') {
// 更新数据,并使用 onAdd 更新到 TweetBox 组件的 state 中
rows.push(newthing);
this.props.onAdd(rows);
}
inputDom.value = '';
},
render: function(){
return (
<div>
<textarea ref="inputnew"></textarea>
<input type="button" className="btn" onClick={this.handleAdd} id="todo-new" value="Post"/>
</div>
)
}
});
// Listdiv 组件用于展示列表
var Listdiv = React.createClass({
render: function(){
return (
<div className="container">
{
this.props.todo.map(function (item) {
return (
<p>{item}</p>
);
})
}
</div>
)
}
});
React.render(
<TweetBox />,
document.body
);
现在真心是越来越难,可能更新就慢了。以前光看别人写的,自己写了才发现整理一篇文章真的不容易啊!!!
结尾名言:我们都会变,样子不变,心也会变,许许多多旧友,早已变得如陌生人一般,皆因他们有不同的角色要扮演,去适应生活与环境所需,不得不变。
参考资料: React官网
React.js的介绍-针对了解jQuery的工程师 (很好的文章,如果你对jquery比较了解,那么从这里去了解react会让你更加容易)
从0开始学习react(三)的更多相关文章
- 正式学习 react(三)
有了基础的webpack基础,我们要对react的基本语法进行学习. 我这个教程全部用es6 实现.可能会忽略一些最基本的语法讲解,这些你在官网上或者其他别的地方都比我讲的全. 今天我要讲一下reac ...
- 五分钟学习React(三):纯HTML代码搭建React应用
上一期我们使用了React官方的脚手架运行React应用.大家可能会觉得这种方法很繁琐,需要配置各种第三方插件.JQuery时代的前端真是让人怀念.这一期,我就带领大家创建一个"怀旧版&qu ...
- 从0开始学习react(一)
本人前端小菜鸡一枚,因为公司要重构网站,打算用用react,毕竟一切为了学习(装B)嘛!!! 在学习react之前,看了许多资料,博客,官方文档之类的,可我这记吃不记打的记性,还是需要在这里记录一下, ...
- 正式学习React( 三)
最基本的jsx语法什么的,我就不介绍了,唯一觉得有用点的,就是声明周期了. 下面的内容是转来的,自己也可以网上去搜,我觉得别人归纳的挺不错的,不过写法可能不是es6的,不影响学习. 在组件的整个生命周 ...
- 从0开始学习react(二)
今天,开始学习第二节!!! 工欲善其事,必先利其器 react推荐我们使用webpack来打包文件,那么我们就用吧!(其实真心不想用啊) 至于好处网上写的天花乱坠的,大家自行解决啊... 这节主要就学 ...
- extJS4.2.0 tabPanel学习(三)
了解添加tab的函数 这里设置为自动添加,菜单是从后台获取的数据,前台进行双击的时候,添加tab页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
- Angular2.0的学习(三)
第三节课:依赖注入 1.什么是依赖注入模式及使用依赖注入的好处 2.介绍Angular的依赖注入实现:注入器和提供器 3.注入器的层级结构
- 正式学习React(五) react-redux源码分析
磨刀不误砍柴工,咱先把react-redux里的工具函数分析一下: 源码点这里 shallowEqual.js export default function shallowEqual(objA, ...
- 为什么学习React Native三点原因
React Native不到两岁,兼容Android平台刚刚1年.我学习React Native其实也就不到1年,不算长,也不算短. Paul Graham在文章中写过:大多数人真正注意到你的时候,不 ...
随机推荐
- 手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。
1. 拍照裁剪后 点击EditText会弹出输入法,却不能输入.可是点击点一EdtiText就能够输入了,所以我就写了一个看不见的EdtiText,切换焦点,这样就攻克了这个奇怪的这问题,应该是and ...
- C#程序实现动态调用DLL的研究[转]
摘 要: 在< csdn 开发高手> 2004 年第 03 期中的<化功大法——将 DLL 嵌入 EXE >一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在 ...
- sql操作事务SqlTransHelper类实现
具体实现代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...
- web开发技术点解析
一.控件篇 1.radio控件 在创建单选控件时,要做到多个radio有单选功能.必须把多个radio的name属性值设置为同样的,否则,多个radio之间是没有联系的. 二.样式篇 1.获取图片中的 ...
- AttributeBehavior
当事件触发的时候... 会循环所有behavior的events 为ower添加事件.....AttributeBehavior 为事件添加如下方法 public function evaluat ...
- Android基本控件之ListView(一)
我们在使用手机的时候,通常看到,像通讯录,QQ列表样式的东西,这里来解释一下,其实那些都是一个ListView 今天,我们就来详细的讲解一下ListView这个控件 ListView中每条显示的数据都 ...
- Ping pong
Ping pong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Linux命令行技巧
Linux命令行技巧 命令 描述 • apropos whatis 显示和word相关的命令. 参见线程安全 • man -t man | ps2pdf - > man.pdf 生成一个PDF格 ...
- 观察者模式(二)--《Head First DesignPattern》
我们用Java中自带的观察者模式接口来重写前面的例子. 先看一下类图: 这里用到了一个setChanged函数,它用来标记状态已经改变的事实,好让notifyObservers()知道当它调用时就应该 ...
- JavaScript之对数组中元素进行增删改
JavaScript中数据类型无非是:简单类型+复杂类型,什么是简单什么又是复杂.从电脑物理存储上讲,简单就是所见即所得,你看见什么,电脑里面存的就只是什么,并不会因为一些关系(比如引用)而多出一部分 ...