这个功能如果是用传统型的jquery来写都要花费很多时间才可以完成的案例,

亲测jquery配合bootstrap来写和bootstrap配合react.js来写,不知不觉中有点震惊。。。

jquery版本代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="./css/bootstrap.css">
<script src="./js/jq18m.js"></script>
<script src="./js/bootstrap.js"></script> </head>
<body>
<div class="container">
<br><br>
<div class="well">
<textarea class="form-control" rows="10"></textarea>
<br>
<span>150</span>
<button class="btn btn-default btn-primary pull-right" id="sub">OK</button>
<button class="btn btn-default pull-right" id="pic">Add Pic</button>
</div>
</div>
<script>
//$('#sub').attr('disabled',true);
$('#sub').prop('disabled',true);
$('textarea').on('input',function(){
//alert('test');
var len = $(this).val().length;
if(len>0){
$('#sub').prop('disabled',false); }else{
$('#sub').prop('disabled',true);
}
$('span').text(150 - len);
}); $('#pic').on('click',function(){
$(this).toggleClass('uppic');
var len = $('textarea').val().length;
if($(this).hasClass('uppic')){
$('span').text(150 - len - 24);
//已经upload了图片
$(this).text('√ upload_OK');
}else{
//还没upload图片
$(this).text('Add Pic');
$('span').text(150 - len);
} //判断下看下是否有内容
var lens = $('span').text();
if(lens< 150){
$('#sub').prop('disabled',false);
}else{
$('#sub').prop('disabled',true);
}
});
</script>
</body>
</html>

react.js版本如下:

<!DOCTYPE>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="./css/bootstrap.css">
<script src="./js/jq11_1.js"></script>
<script src="./js/bootstrap.js"></script>
<script src="./js/react.js"></script>
<script src="./js/react-dom.js"></script>
<script src="./js/browser.min.js"></script>
<style>
*{ margin:0px; padding:0px;} </style>
</head>
<body>
<div id="dome" class="container"></div>
<div id="test"></div>
<script type="text/babel">
var Fix = React.createClass({
getInitialState:function(){
return{
text:'',//表示大文本域的内容
uploaded:false //表示是否上传图片,默认否
}
},
//计算剩余字数的方法
fontCount:function(){
//总数:150字
//要考虑text的长度和是否已经上传图片了
if(this.state.uploaded){
return 150 - 25 -this.state.text.length;
}else{
return 150 - this.state.text.length;
}
},
handleChange:function(e){
this.setState({
text:e.target.value
}); },
handleUpload:function(){
this.setState({
uploaded:!this.state.uploaded
});
},
render:function(){
return(
<div>
<br /><br />
<div className="well">
<textarea className="form-control" rows="10" onChange={this.handleChange} >
{this.props.text}</textarea>
<br />
<span>{this.fontCount()}</span>
<button className="btn btn-default btn-primary pull-right"
disabled={this.state.text.length== 0 && !this.state.uploaded}>OK</button>
<button className="btn btn-default pull-right" onClick={this.handleUpload}>
{this.state.uploaded ? "√ upload_OK":"Add Pic"}</button>
</div>
</div>
);
}
});
ReactDOM.render(
<Fix />,
document.getElementById('dome')
);
</script>
</body>
</html>

效果相同,但是代码量和逻辑处理react完胜。。。。。。。。。。。

夺命雷公狗-----React---21--小案例之心情留言板的更多相关文章

  1. 夺命雷公狗—angularjs—21—解决angularjs压缩问题

    我们在实际的开发中往往离不开js的代码压缩,因为这样可以减轻服务器的压力,是的的方法如下所示: <!DOCTYPE html> <html lang="en" n ...

  2. 夺命雷公狗-----React---12--添加类和样式

    <!DOCTYPE> <html> <head> <meta charset="utf-8"> <title></ ...

  3. 夺命雷公狗-----React---11--添加css样式的方法

    <!DOCTYPE> <html> <head> <meta charset="utf-8"> <title></ ...

  4. 夺命雷公狗-----React---10--组建嵌套进行数据遍历

    先写一个组建... 然后进行嵌套.. <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  5. 夺命雷公狗-----React---9--map数据的遍历

    比如我们要实现的是这种效果: 用这种方法来写,她只能写死在哪,没啥意思,所以我们定义一个数据,然后来测试下map方法对她遍历出来的数据 <!DOCTYPE html> <html l ...

  6. 夺命雷公狗-----React---8--react官方提供的组建实现双向绑定

    首先要引入她.. <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. 夺命雷公狗-----React---7--组建的状态props和state

    props:组建初始要渲染的数据,他是不可以改变的 state:组建状态发生改变,调用render重新渲染数据 我们来写一个例子: <!DOCTYPE html> <html lan ...

  8. 夺命雷公狗-----React---6--props多属性的传递

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 夺命雷公狗-----React---5--props对象的传递

    提示:props的值是不可以改变的... <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

随机推荐

  1. ZeroMQ接口函数之 :zmq_msg_recv - 从一个socket中接受一个消息帧

    ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq_msg_recv zmq_msg_recv(3) ØMQ Manual - ØMQ/3.2.5 Name zmq_ ...

  2. E/dalvikvm: Could not find class...

    logcat日志输出信息: - ::-/net.chiangfai I/dalvikvm: Could not find method android.content.res.Resources.ge ...

  3. wordpress 自定义登录表单

    wordpress 有很多插件支持自定义登录表单,本文讨论无插件形式. 自定义登录表单又分为两种 自定义登录表单 在前端创建一个登录页面

  4. 轻量级队列beanstalkd

    一.基本Beanstalkd,一个高性能.轻量级的分布式内存队列系统,最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟,支持过有9.5 million用户的Face ...

  5. redis笔记

    redis字符串 : 存储基本的一个键值对. redis哈希 : Redis的哈希值是字符串字段和字符串值之间的映射,所以他们是表示对象的完美数据类型. 一个哈希表可以存在多个键值对,可对键值进行增删 ...

  6. redis3.2新增属性protected mode

    在安装新版redis时(3.2) , 一直出现问题 , 只能本机连接其他机器访问失败 , 后来发现是新版增加了安全机制 在配置文件里可以发现多出了protected-mode这一项 , 如果为yes ...

  7. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  8. C++中为什么要将析构函数定义成虚函数

    构造函数不可以是虚函数的,这个很显然,毕竟虚函数都对应一个虚函数表,虚函数表是存在对象内存空间的,如果构造函数是虚的,就需要一个虚函数表来调用,但是类还没实例化没有内存空间就没有虚函数表,这根本就是个 ...

  9. oracle+servlet+extjs4 分页表格布局示例代码

    Log.java package com.example.entity; import java.util.Date; public class Log { private int id; priva ...

  10. Git实用命令手册

    下载代码 git clone <git地址> 用户配置 git config —-global user.name <name> git config —-global use ...