JSX概述

  由于通过React.createElement()方法创建的React元素代码比较繁琐,结构不直观,无法一眼看出描述的结构,不优雅,开发时写代码很不友好。

  React使用JSX来替代常规的JavaScript,JSX可以理解为的JavaScript语法扩展,它里面的标签申明要符合XML规范要求。

  • React不一定非要使用JSX,但它有以下优点:
    • JSX执行更快,因为它在编译为JavaScript代码后进行了优化
    • 它是类型安全的,在编译过程中就能发现错误
    • 声明式语法更加直观,与HTML结构相同,降低了学习成本,提升开发效率速度
  • JSX语法:
    • 定义虚拟DOM时,不要用引号
    • 标签中混入js表达式时要用{}
    • 样式的类名指定不要用class,要用className
    • 内联样式,要用style={{key: value}}的形式去写
    • 只有一个根标签
    • 标签必须闭合
    • 标签首字母:
      • 小写字母开头,则会将标签转为html中同名标签,若html标签中无对应的同名元素,编译会报错
      • 大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错

开始本文正文,下面看下React中的JSX { }的使用,具体内容如下所示:

在做react开发的时候,我们知道最后要通过render方法来将React元素挂载到真实的DOM上。而创建一个React元素,可以通过两种方式创建。
(1)通过JSX方式
(2)通过React.createElement()方法创建

而JSX的方式,最终也会被babel转换,变成通过React.createElement()方法进行创建。
之所以这样子,是因为JSX能够很大程度的方便开发,可以少写很多代码。

而本篇文章就是讲解一下如何在React中使用JSX。

1.在JSX中使用{ }

例如当我们通过JSX创建一个React元素:

let a = 1
const div = <div></div>

而在这个div中想使用变量a,我们就可以通过{}来对变量进行引入。

(1)引入变量

const div = <div>{a}</div> //变量

当然,除了引入变量这种,还有很多中方式可以在{}中进行编写。

(2)引入对象属性

    let empty = {
      a: 1,
      b: 2
    }
    const div = <div>{empty.a}</div> //对象属性

(3)引入计算表达式

    const div = <div>{empty.a   empty.b}</div> //计算表达式

(4)引入函数

    const fn = ()=>{
      return 2
    }
    const div = <div>{fn()}</div> //函数

(5)引入逻辑表达式

    const div = <div>{fn() === 2 ? 1 : 2}</div> //逻辑表达式

(6)引入数组

    const div = <div>{[1,2,3,4,5]}</div> //数组

OK,除了上面写在大括号里的,还有几种数据类型没有引入。这里需要注意,大括号里虽然可以解析数组,但是不能解析对象(有一种特例后面会说)。

如果在大括号里面放入了对象,那么React就会报错。
同样的,如果在大括号里的是一个方法,也会报错(也有一种特例)。

如果在{}里面,引入了布尔类型,undefined,null这三种数据类型。React虽然不会报错,但是并不会渲染到真实DOM上。

2.在JSX中嵌套标签

在正常的HTML里面,标签是可以任意嵌套的。如果在React中,可以看下面的代码:

    class Em extends React.Component {
      render(){
        return <div></div>
      }
    }

    const div = (<div>
      <Em>
        <p>123</p>
      </Em>
    </div>)

通过上面的方式,是没办法实现出想要的效果的。因为它不符合JSX的使用规范,对于Em组件,是没有收到p标签的,所以也不会对它进行展示。
正确写法如下:

    class Em extends React.Component {
      render(){
        return <div>{this.props.children}</div>
      }
    }

    const div = (<div>
      <Em>
        <p>123</p>
      </Em>
    </div>)

这种方式,主要是通过props.children拿到了P标签,并且在Em组件里面渲染。

说到这里,可以说一下另一个用到{}的地方,当我们给React组件绑定属性的时候,可以通过…的方式:

    let props = { a:1,b:2}
    const div = <div {...props}>123</div>

请记住,这里的{…props}和Es6的解构并不是一回事!

也就是这种写法只能出现在JSX里面,不能在HTML里面这么写。因为在这里babel已经对它进行了处理所以才可以这么写。

3.{}中的样式和事件处理

刚才说{}里面不应该有对象和函数,但是有个别的特例,就是style样式,和事件处理。

在JSX中给标签添加样式是这么写的:

    const div = <div style={{fontSize:'14px',aaa:'2'}}></div>

也就是{}里面的,是该标签的样式对象。值得注意的是里面的key都是用小驼峰命名的。而且必须有效,不然是无法渲染到真实DOM的标签上的。

在JSX中给标签添加事件是这么写的:

    const div = <div onClick={() => {console.log(123)}}>123</div>

同样,事件名也是小驼峰式命名的。

4.在JSX中使用语句

在jsx中是可以通过语句来对React元素进行处理的。例如

条件判断语句:

    let div = [<div>123</div>];
    if(1 1 === 2){
      div.push(<div>true</div>)
    }else{
      div.push(<div>false</div>)
    }

循环语句:

    let div = [1,2,3,4,5].map((item,index) => {
      return <li key={index}>{item}</li>
    })

关于JSX的一些使用就先说这么多,后续有新内容会继续补充。

到此这篇关于React中的JSX  { }的使用的文章就介绍到这了,更多相关React JSX使用内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

React中的JSX  { }的使用详解的更多相关文章

  1. ios – React native链接到另一个应用程序

    如果是错误的,有人知道如何调用正确的吗?

  2. ios – React Native – 在异步操作后导航

    我正在使用ReactNative和Redux开发移动应用程序,我正面临着软件设计问题.我想调用RESTAPI进行登录,如果该操作成功,则导航到主视图.我正在使用redux和thunk所以我已经实现了异步操作,所以我的主要疑问是:我应该把逻辑导航到主视图?我可以直接从动作访问导航器对象并在那里执行导航吗?.我对组件中的逻辑没有信心.似乎不是一个好习惯.有没有其他方法可以做到这一点?

  3. 在ios中使用带有React Native(0.43.4)的cocoapods的正确方法是什么?

    我已经挖掘了很多帖子试图使用cocoapods为本地ios库设置一个反应原生项目,但我不可避免地在#import中找到了丢失文件的错误.我的AppDelegate.m文件中的语句.什么是使用反应原生的可可豆荚的正确方法?在这篇文章发表时,我目前的RN版本是0.43.4,而我正在使用Xcode8.2.1.这是我的过程,好奇我可能会出错:1)

  4. ios – React Native WebView滚动行为无法按预期工作

    如何确保滚动事件的行为与ReactNative应用程序中的浏览器相同?

  5. ios – React Native – BVLinearGradient – 找不到’React/RCTViewManager.h’文件

    谢谢.解决方法几天前我遇到了完全相同的问题.问题是在构建应用程序时React尚未链接.试试这个:转到Product=>Scheme=>管理方案…=>点击你的应用程序Scheme,然后点击Edit=>转到Build选项卡=>取消选中ParallelizeBuild然后点击标志添加目标=>搜索React,选择第一个名为React的目标,然后单击Add然后在目标列表中选择React并将其向上拖动到该列表中的第一个.然后转到Product=>再次清理并构建项目.这应该有所帮助.

  6. ios – React Native – NSNumber无法转换为NSString

    解决方法在你的fontWeight()函数中也许变成:

  7. ios – React native error – react-native-xcode.sh:line 45:react-native:command not found命令/ bin/sh失败,退出代码127

    尝试构建任何(新的或旧的)项目时出现此错误.我的节点是版本4.2.1,react-native是版本0.1.7.我看过其他有相同问题的人,所以我已经更新了本机的最新版本,但是我仍然无法通过xcode构建任何项目.解决方法要解决此问题,请使用以下步骤:>使用节点版本v4.2.1>cd进入[你的应用]/node_modules/react-native/packager>$sh./packager.s

  8. 反应原生 – 如何通过Xcode构建React Native iOS应用程序到设备?

    我试图将AwesomeProject应用程序构建到设备上.构建成功并启动屏幕显示,但后来我看到一个红色的“无法连接到开发服务器”屏幕.它表示“确保节点服务器正在运行–从Reactroot运行”npmstart“.看起来节点服务器已经运行,因为当我做npm启动时,我收到一个EADDRINUSE消息,表示该端口已经在使用.解决方法从设备访问开发服务器您可以使用开发服务器快速迭代设备.要做到这一点,你的

  9. 静音iOS推送通知与React Native应用程序在后台

    我有一个ReactNative应用程序,我试图获得一个发送到JavaScript处理程序的静默iOS推送通知.我看到的行为是AppDelegate中的didReceiveRemoteNotification函数被调用,但是我的JavaScript中的处理程序不会被调用,除非应用程序在前台,或者最近才被关闭.我很困惑的事情显然是应用程序正在被唤醒,并且它的didReceiveRemoteNotifi

  10. 如何为iOS的React Native设置分析

    所以我已经完成了一个针对iOS的ReactNative项目,但是我想在其中分析.我尝试了react-native-google-analytics软件包,但是问题阻止了它的正常工作.此外,react-native-cordova-plugin软件包只适用于Android,因此插入Cordova插件进行分析的能力现在已成为问题.我也没有Swift/ObjectiveC的经验,所以将完全失去GA的插入.有没有人有任何建议如何连接GoogleAnalytics的ReactNativeforiOS?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部