React学习之JSX与react事件实例分析


Posted in Javascript onJanuary 06, 2020

本文实例讲述了React学习之JSX与react事件。分享给大家供大家参考,具体如下:

1、JSX

1.1、表达式

在React中使用JSX来描述HTML页面,而且可以与js混合使用,使用JavaScript表达式时要将表达式包含在大括号里

const user = {
 firstName: 'Harper',
 lastName: 'Perez'
};
const element = (    //将JSX语句保存在变量中
 <h1>
  Hello, {formatName(user)}!  {/* {}中写js语句*/}
 </h1>
);

在编译之后呢,JSX 其实会被转化为普通的 JavaScript 对象,可以对其赋值或把它当作参数传递:

ReactDOM.render(
 element,        //通过JSX变量渲染react节点
 document.getElementById('root')
);

1.2、属性

JSX中可以像HTML中一样使用"字符串"的属性,也可以使用{表达式}属性:

const element = <div tabIndex="0"></div>;
const element = <img src={user.avatarUrl}></img>;

注意:

1、React DOM 使用 camelCase 小驼峰命名 来定义属性的名称,而不是使用 HTML 的属性名称。例如font-size要改为fontSize。

2、HTML中的保留字不能用于js中,例如class,应改为className:

const ele= <div className="red">Red Color</div>

3、JSX中行内样式style需要用一个对象返回,而不是字符串:

const ele=<div style="color:red">Red</div>     //会报错
const ele= <div style={{color:'red'}}>Red</div>

{{color:red}}中第一个大括号代表这是一个js表达式,第二个代表这是一个用大括号引起的对象

1.3、嵌套

如果 JSX 标签是闭合式的,那么需要在结尾处用 />:

const element = <img src={user.avatarUrl} />;

jJSX内含多个标签时,返回时需要在最外面用一个div把它们包起来:

const element = (
 <div>
  <h1>Hello!</h1>
  <h2>Good to see you here.</h2>
 </div>
);

1.4、注释

在jsx中的注释要单独占一行,且用大括号包起来,例如:{/*注释*/},否则有可能会被当成普通文本,引起错误。

2、事件

react事件的绑定采用驼峰写法onClick={this.function}

例如定义一个切换ON/OFF的函数shiftFlag:

class Toggole extends React.Component{
 constructor(props){
  super(props);
  this.state={
   flag:true
  };
  this.shiftFlag=this.shiftFlag.bind(this);   //函数shiftFlag绑定this
 }
 shiftFlag(e){
  e.preventDefault();
  this.setState({
   flag:!this.state.flag
  });
 }
 render(){
  return <a href="#" rel="external nofollow" onClick={this.shiftFlag}>{this.state.flag?'ON':'OFF'}</a>
 }
}

注:

1、类的方法默认是不会绑定this的,直接在方法shiftFlag中使用this会报错this is undefined,因此需要为shiftFlag绑定this。

2、e是一个事件参数,使用e.preventDefault()方法来阻止a标签的默认跳转行为。

react事件参数的传递通过绑定来实现,在传递时,绑定的this在前,参数在后。在定义函数时,事件对象e要放在最后,例如定义一个setName函数修改name为传入的参数:

class Name extends React.Component{
 constructor(props){
  super(props);
  this.state={
   name:'default'
  }
 }
 setName(name,e){   //事件e放在最后
  this.setState({
   name:name
  })
 }
 render(){
  return <button onClick={this.setName.bind(this,'tory')}>{this.state.name}</button>
 }
}

希望本文所述对大家React程序设计有所帮助。

Javascript 相关文章推荐
浏览器加载、渲染和解析过程黑箱简析
Nov 29 Javascript
多种方式实现JS调用后台方法进行数据交互
Aug 20 Javascript
js有序数组的连接问题
Oct 01 Javascript
javascript中$(function() {});写与不写有哪些区别
Aug 10 Javascript
javascript iframe跨域详解
Oct 26 Javascript
jquery心形点赞关注效果的简单实现
Nov 14 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
Dec 08 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
Jan 18 Javascript
基于Vue.js实现tab滑块效果
Jul 23 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
Sep 14 Javascript
使用Vue实现调用接口加载页面初始数据
Oct 28 Javascript
js实现无缝轮播图插件封装
Jul 31 Javascript
vue学习之Vue-Router用法实例分析
Jan 06 #Javascript
借助云开发实现小程序短信验证码的发送
Jan 06 #Javascript
React学习之受控组件与数据共享实例分析
Jan 06 #Javascript
Node.js创建一个Express服务的方法详解
Jan 06 #Javascript
JS正则表达式验证端口范围(0-65535)
Jan 06 #Javascript
基于jQuery实现挂号平台首页源码
Jan 06 #jQuery
JS实现音乐导航特效
Jan 06 #Javascript
You might like
基于php常用正则表达式的整理汇总
2013/06/08 PHP
php之static静态属性与静态方法实例分析
2015/07/30 PHP
Safari5中alert的无限循环BUG
2011/04/07 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
浅谈js script标签中的预解析
2016/12/30 Javascript
win系统下nodejs环境安装配置
2017/05/04 NodeJs
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
Python while true实现爬虫定时任务
2020/06/08 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
C#面试常见问题
2013/02/25 面试题
儿子婚宴答谢词
2014/01/09 职场文书
企业管理培训感言
2014/01/27 职场文书
环保建议书500字
2014/05/14 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
Python中常见的导入方式总结
2021/05/06 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python