这是官网上的一个简单的例子

const name = 'Josh Perez';
const element = <h1>Hello, {name}</h1>; ReactDOM.render(
element,
document.getElementById('root')
);

从中可以看到:

     jsx    是可以在里面写js代码的,
    在{   }里面写js代码   
在这里我解释一下,为什么可以在react里的HTML标签里面的{}里写js代码
 
Babel 将JSX编译成 React.createElement() 调用。
而react就是运用了这个方法,例如
 
首先写一小段HTML代码
 
<ul  title='aa'>
<li>hello</li>
</ul>

这段代码在react里,因为我们使用react的时候都会引入react,因此react会自动解析成

React.createElement('ul',{
title:'aa'
},React.createElement('li',{},'hello'))

这两段代码所表示出来的结果是一样的

由此可以看出,react会将jsx花括号中的内容转化成js代码

这样,

你可以用 花括号 把任意的 JavaScript表达式嵌入到 JSX 中
 
同时也要注意,是可以将任意的JavaScript表达式嵌入其中,但是还是不能嵌入JavaScript语句,例如不能嵌入if  else语句,但是可以嵌入三元表达式
 
这就是 JSX ,他是 JavaScrip 的一种扩展语法。我们推荐在 React 中使用这种语法来描述 UI 信息。JSX 可能会让你想起某种模板语言,但是它具有 JavaScrip 的全部能力

从本质上讲,JSX 只是为 React.createElement(component, props, ...children) 函数提供的语法糖。

因为 JSX 被编译为 React.createElement 的调用,所以 React 库必须在你 JSX 代码的作用域中。

官网建议给组件以大写字母开头的方式命名。如果你已经有以小写字母开头的组件,需要在 JSX 中使用前,将其赋值给以大写字母开头的变量。

因为在react中,组件的引用必须是首字母大写,否则无法达到想要的结果

JSX 中的 props(属性)

属性有以下几种形式

1、你可以传递任何一个用 {} 包裹的 JavaScript 表达式作为 props(属性)

//JavaScript 表达式作为 props(属性)
<MyComponent foo={ + + + } />

2、你可以传入一个字符串字面量作为一个 props(属性)

<MyComponent message="hello world" />

<MyComponent message={'hello world'} />

3、如果你没给 prop(属性) 传值,那么他默认为 true

<MyTextBox autocomplete />

<MyTextBox autocomplete={true} />

4、如果你已经有一个 object 类型的 props,并且希望在 JSX 中传入,你可以使用扩展操作符 ...传入整个 props 对象。

function App1() {
return <Greeting firstName="Ben" lastName="Hector" />;
} function App2() {
const props = {firstName: 'Ben', lastName: 'Hector'};
return <Greeting {...props} />;
}

JSX 中的 Children(子元素)

1、您可以在开放标签和闭合标签中放入一个字符串,那么 props.children 就是那个字符串。这对于内置很多 HTML 元素时非常有用

<MyComponent>Hello world!</MyComponent>

2、通过使用 {} 包裹,你可以将任何的 JavaScript 元素而作为 children(子元素) 传递

<MyComponent>foo</MyComponent>

<MyComponent>{'foo'}</MyComponent>

3、props.children 的值可以是回调函数

// Calls the children callback numTimes to produce a repeated component
function Repeat(props) {
let items = [];
for (let i = ; i < props.numTimes; i++) {
items.push(props.children(i));
}
return <div>{items}</div>;
} function ListOfTenThings() {
return (
<Repeat numTimes={}>
{(index) => <div key={index}>This is item {index} in the list</div>}
</Repeat>
);
}

4、falsenullundefined,和 true 都是有效的的 children(子元素) 。但是并不会被渲染,下面的JSX表达式渲染效果是相同的,都是空

<div />

<div></div>

<div>{false}</div>

<div>{null}</div>

<div>{undefined}</div>

<div>{true}</div>

在有条件性渲染 React 元素时非常有用。如果 showHeader 为 true 时,<Header />会被渲染

<div>
{showHeader && <Header />}
<Content />
</div>

如果本文对您有帮助,请抬抬您的小手,点下右下角的推荐, ^-^,当然如果看了这篇博客对您有帮助是我最开心的事,毕竟赠人玫瑰,手有余香, ^-^,如果这篇博客没有帮助到您,那就只能说一声抱歉啦

react中的jsx详细理解的更多相关文章

  1. React中diff算法的理解

    React中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DO ...

  2. react中this.setState的理解

    this.setState作用? 在react中要修改this.state要使用this.setState,因为this.state只是一个对象,单纯的修改state并不会触发ui更新.所以我们需要用 ...

  3. 在 React 中使用 JSX 的好处

    优点: 1.允许使用熟悉的语法来定义 HTML 元素树: 2.提供更加语义化且移动的标签: 3.程序结构更容易被直观化: 4.抽象了 React Element 的创建过程: 5.可以随时掌控 HTM ...

  4. react中对于context的理解

    一.context旧版的基本使用 1.context的理解 当不想在组件树中通过逐层传递props或state的方式来传递数据时,可使用context来实现跨层级的组件数据传递. 2.context的 ...

  5. React生命周期简单详细理解

    前言 学习React,生命周期很重要,我们了解完生命周期的各个组件,对写高性能组件会有很大的帮助. Ract生命周期 React 生命周期分为三种状态 1. 初始化 2.更新 3.销毁 初始化 1.g ...

  6. react中key值的理解

    react利用key来识别组件,它是一种身份标识标识,相同的key react认为是同一个组件,这样后续相同的key对应组件都不会被创建有了key属性后,就可以与组件建立了一种对应关系,react根据 ...

  7. React.js深入学习详细解析

    今天,继续深入学习react.js. 目录: 一.JSX介绍 二.React组件生命周期详解 三.属性.状态的含义和用法 四.React中事件的用法 五.组件的协同使用 六.React中的双向绑定   ...

  8. React中JSX的理解

    React中JSX的理解 JSX是快速生成react元素的一种语法,实际是React.createElement(component, props, ...children)的语法糖,同时JSX也是J ...

  9. 深入理解react中的虚拟DOM、diff算法

    文章结构: React中的虚拟DOM是什么? 虚拟DOM的简单实现(diff算法) 虚拟DOM的内部工作原理 React中的虚拟DOM与Vue中的虚拟DOM比较 React中的虚拟DOM是什么?   ...

随机推荐

  1. SKU的结构与页面渲染

    http://blog.jobbole.com/109138/?lwfrom=user_dingfriend

  2. bzoj 2238 Mst —— 树剖+mn标记永久化

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2238 看了半天... 首先,想要知道每条边删除之后的替代中最小的那个: 反过来看,每条不在 ...

  3. explain之二:Explain 结果解读与实践,分析诊断工具之二

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...

  4. 024--python re、logging、configparser、hashlib模块

    一.re模块 re模块又称正则表达式是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹 ...

  5. 如何修改hosts文件并生效

    hosts文件位置C:\Windows\System32\drivers\etc(可以建立一个.bat 的文件把(start "" C:\Windows\System32\driv ...

  6. profile和bashrc

    转自某不知名网友 /etc/profile,/etc/bashrc 是系统全局环境变量设定~/.profile,~/.bashrc用户家目录下的私有环境变量设定当登入系统时候获得一个shell进程时, ...

  7. 仅用递归函数操作逆序一个栈(Swift 4)

    /// 取出栈底的数 func getAndRemoveLastElement(_ items: inout [Int]) -> Int { let value = items.remove(a ...

  8. 用jQuery获取到一个类名获取到的是一个数组 ,如果对数组中的每个进行相应的操作可以这样进行

    $(".userImg").each(function(){ $(this).click(function(){ var imgid = $(this).attr("id ...

  9. 线段树(区间合并) HDOJ 3308 LCIS

    题目传送门 题意:线段树操作:1. 单点更新 2. 求区间的LCIS(longest consecutive increasing subsequence) 分析:注意是连续的子序列,就是简单的区间合 ...

  10. (025)[系统故障]XP下禁止将串口设备识别成鼠标(转)

    很多人都遇到过这种问题:Windows XP启动时将一台连续发送数据的串口设备识别成串口鼠标,自动安装了串口鼠标驱动,而设备因此无法正常工作,而光标则无规律地到处跑.对此问题,Internet上的方法 ...