react中的jsx详细理解

   2023-03-08 学习力0
核心提示:这是官网上的一个简单的例子const name = 'Josh Perez';const element = h1Hello, {name}/h1;ReactDOM.render(element,document.getElementById('root'));从中可以看到:     jsx    是可以在里面写js代码的,    在{   }里面写js代码   在这里我

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

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={1 + 2 + 3 + 4} />

 

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 = 0; i < props.numTimes; i++) {
    items.push(props.children(i));
  }
  return <div>{items}</div>;
}

function ListOfTenThings() {
  return (
    <Repeat numTimes={10}>
      {(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>

 

 

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

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • React实现基于Antd密码强度校验组件示例详解
    React实现基于Antd密码强度校验组件示例详解
    目录引言效果预览组件思想组件开发引言最近在开发 Nest 和 Umi 技术栈的个人项目,在用户管理模块需要用到一个密码强度校验组件,在网上寻找一方资料,没有找到自己想要的,特此自己造轮子!效果预览组件思想既然是密码强度校验,那么强度就必须有个梯度,这
    03-16
  • 03 React快速入门(三)——实现从一个输入框中添加完数据后此输入框内容清除的功能
    03 React快速入门(三)——实现从一个输入框中
    功能描述:      我们在一个输入框输入内容,然后点击添加按钮,此输入框的内容就会添加到页面上,但是此输入框中还存在上次输入的内容,我们想在每次输入添加完成之后,此输入框中的内容就会清除,如图:   实现思路:      我们可以先在输入框上定
    03-08
  • react编译器jsxTransformer,babel
    1.JSX是什么JSX其实是JavaScript的扩展,React为了代码的可读性更方便地创建虚拟DOM等原因,加入了一些类似XML的语法的扩展。2.编译器——jsxTransformerJSX代码并不能直接运行,需要将它编译成正常的JavaScript表达式才能运行,jsxTransformer.js就是这一编
    03-08
  • G2( bizCharts ) React 绘制混合图例
    G2( bizCharts ) React 绘制混合图例
     G2( bizCharts ) React 绘制混合图例,// data-set 可以按需引入,除此之外不要引入别的包import React from 'react';import { Chart, Axis, Tooltip, Geom, Legend, Label } from 'bizcharts';import DataSet from '@antv/data-set';// 下面的代码会被作为
    03-08
  • React-多页面应用 react怎么写页面
    React-多页面应用 react怎么写页面
    1初始化项目npm init create-react-app my-app2.修改indeximport React from 'react';import ReactDOM from 'react-dom';import './index.css';import App from './App';ReactDOM.render(App /, document.getElementById('root')
    03-08
  • react-native start 启动错误解决方法
    ERRORError watching file for changes: EMFILE{"code":"EMFILE","errno":"EMFILE","syscall":"Error watching file for changes:","filename":null}Error: Error watching file for changes: EMFILE
    03-08
  • React兄弟组件通信(发布者-订阅者模式)
    // eventProxy.js'use strict';const eventProxy = {onObj: {},oneObj: {},on: function(key, fn) {if(this.onObj[key] === undefined) {this.onObj[key] = [];}this.onObj[key].push(fn);},one: function(key, fn) {if(this.oneObj[key] === undefined) {thi
    03-08
  • React笔记_(7)_react路由 react路由配置
    路由路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。路由器当然是作为一个转发设备出现的,主要是转发数据包来实现网络互联。那么react的路由到底指的是什么呢?举个栗子~~~在网页中点击后,从A页面跳到B页面,跳转过程中url发生变
    03-08
  • react-native关闭所有黄色警告 react native st
     将以下这两句话加在index.js(入口文件)中,放在AppRegistry.registerComponent('App', () = App)之前即可1 console.ignoredYellowBox = ['Warning: BackAndroid is deprecated. Please use BackHandler instead.','source.uri should not be an empty str
    03-08
  • react中style的写法 react styles
    div style={{width: 20px; height=30px}}style的写法/div 
    03-08
点击排行