02:JSX

作者: 赛博剑仙_李玄器 | 来源:发表于2019-11-06 10:31 被阅读0次

一、什么是JSX

JSX是JS的语法扩展,是一种将标记和逻辑共同存放在松散耦合单元(组件)中的编码方式(语法糖)。被用来声明React中的元素,描述用户界面。

JSX编译渲染过程

JSX被编译后,会转化为普通的JS函数调用。
对该函数取值,最终得到一个JS对象。
再通过React.render()函数渲染为DOM元素。

用原生JS或者jQuery写页面的时候,总是强调内容结构(HTML)、层叠样式(CSS)、逻辑行为(JS)三者分离,不要耦合。但说是不耦合,其实就是放在三种不同文件位置下管理。本质上并没有实现逻辑上的分离。JSX可以在react代码中直接混合使用js和html来编写代码,这是一种宏观上的代码封装,模块化处理。当然这也意味着,需要将jsx代码编译成普通的javascript代码,才能在浏览器中运行。

对于这种处理方式,有人说是倒退,有人说是语法糖。
其实两种方式各有各的好处,因为技术开发者的认知思路不同,所以技术的存在形式也非常多。作为一名学习者,既然你想学这套技能,那就需要理解设计者的设计思路,没有抗拒情绪,这样学起来才会事半功倍。


PS:ReactDOM.render( )

ReactDOM.render(element, container[, callback])
意为在container里渲染一个React元素,并返回对该组件的引用(或者针对无状态组件返回null)。
首次调用,容器节点里所有DOM元素都会被替换。后续调用,会使用DOM差分算法,高效部分更新。
如果提供了可选的callback回调参数,该回调将在组件被渲染或更新后执行。


二、JSX属性

  1. 在JSX语法中,可以通过引号,将属性值指定为字符串。
    也可以通过大括号,在属性值中嵌入一个JS表达式。对于同一属性,不能同时使用这两种符号。
    JSX语法支持使用json,但是需要使用两层大括号括起,外层表示内容为JS,内层是json本身的。
const element1 = <div tabIndex="0"></div>;
const element2 = <div src = {user.avatarUrl}></div>;
const element3 = <div style = {{'background':'red'}}></div>;
  1. 假如一个标签里没有内容,可以通过 /> 来闭合标签,当然JSX标签也能包含很多子元素。
    为了便于阅读,将JSX拆成多行,将内容包裹在括号中是建议写法,虽然不强制,但是这样可以避免自动插入分号陷阱。
const element = (
    <div>
        <h1>Hello</h1>
        <h2>Good Luck</h2>
    </div>
    <img src={user.avatarUrl} />;
);

三、JSX表示对象

Bable会把JSX转译为一个名为React.createElement( )的函数调用。
以下两种实例代码完全等效:

const element = (
    <h1 className="greeting">
    Hello World!
    </h1>
);
const element = React.createElement(
    'h1',
    {className: 'greeting'},
    'Hello World!'
);

PS:React.createElement( )
React.createElement(
    type,
    [props],
    [...children]
)

该方法创建并返回指定类型的新React元素。
其中类型参数既可以是标签名字符串(如'div'或'span'),也可以是React组件类型,还可以是React fragment类型。
每个JSX元素只是调用 React.createElement(component, props, ...children)的语法糖,React并不强制使用JSX,能用JSX实现的任何事情,用纯JS也可以同样实现

相关文章

  • 02:JSX

    一、什么是JSX JSX是JS的语法扩展,是一种将标记和逻辑共同存放在松散耦合单元(组件)中的编码方式(语法糖)。...

  • react-jsx

    jsx 是类似 js 模板语法 声明 jsx 使用 jsx jsx 语法 jsx 是 js 的语法扩展,在 jsx...

  • 02.介绍JSX

    所有的demo源码:https://github.com/Ching-Lee/react-base 1.什么是JS...

  • JSX

    JSX Follow me on GitHub JSX1. 为什么会有JSX?2. JSX的基本使用2.1 JSX...

  • JSX

    What is JSX? JSX stands for JavaScript XML. JSX allows us...

  • 一起学React--元素渲染和生命周期

    1. JSX JSX是Javascript的语法拓展,在React中通过JSX渲染元素 类似模版渲染,jsx可以通...

  • 《React极简教程》第二章 React JSX

    React JSX Why JSX?You don't have to use JSX with React. Y...

  • React 核心概念

    JSX JSX 是一个表达式,JSX的值是一个JS对象,因此可以再if for代码块中使用JSX,也可以将JSX赋...

  • 获取最近12个月;antd只能选择最近12个月的日期

    timeData.jsx father.jsx

  • react随记1 jsx简介

    JSX简介 JSX是JavaScript的预发扩展。推荐在React中使用JSX来描述用户界面。 1.在JSX中使...

网友评论

      本文标题:02:JSX

      本文链接:https://www.haomeiwen.com/subject/anaybctx.html