为什么react要使用JSX

官方文档

什么是JSX?

1.一个 JavaScript 的语法扩展

为什么使用JSX?

React 认为渲染逻辑本质上与其他 UI 逻辑内在耦合,比如,在 UI 中需要绑定处理事件、在某些时刻状态发生变化时需要通知到 UI,以及需要在 UI 中展示准备好的数据。

React 并没有采用将标记与逻辑进行分离到不同文件这种人为地分离方式,而是通过将二者共同存放在称之为“组件”的松散耦合单元之中,来实现关注点分离。

在html文件中不使用JSX 创建dom 节点

react
<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>

react-dom
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>

<script type='text/javascript'>
  const name = 'shuxiaoxii';
  const element = React.createElement('h1', {style: {color: 'red'}}, `hello, ${name}`);
  ReactDOM.render(element, document.getElementById('root')
</script>

在html文件中使用jsx 创建dom 节点

<!-- react核心库-->
<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>

<!-- react-dom -->
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>

<!-- 支持JSX -->
<script crossorigin src='https://unpkg.com/babel-standalone@6/babel.min.js'></script>

<script type='text/babel'>
  const name = 'shuxiaoxii';
  const element = <h1 style={{color: 'red'}}>Hello {name}</h1>
  ReactDOM.render(element, document.getElementById('root'));
</script>
  1. react 核心库创建虚拟dom
  2. react-dom将虚拟dom渲染到真实dom中
  3. jsx本质是一个语法糖, 简化React.createElement的书写语法
new Function(低代码)实现react组件
  1. 2021年7月19日 增加 使用Babel.transform 转换 jsx代码为js代码并执行
 <!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>

</head>
<body>
<div id="root"></div>
<script  src="./js/react.production.min.js"></script>
<script src="./js/react-dom.production.min.js"></script>
<script type='text/javascript'>
    // const name = 'zsz';
    // const childrenElement = React.createElement('span', {style: {color: 'red'}}, `hello, ${name}`);
    // const element = React.createElement('h1', {style: {color: 'red'}}, childrenElement);
    // ReactDOM.render(element, document.getElementById('root'));
   /******************** 以上代码等价于 ************/
  let func = new Function('name','const childrenElement = React.createElement(\'span\', {style: {color: \'red\'}}, `hello, ${name}`);\n' +
      '    const element = React.createElement(\'h1\', {style: {color: \'red\'}}, childrenElement);\n' +
      '    ReactDOM.render(element, document.getElementById(\'root\'));');
   func('zsz');

</script>
</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值