zoukankan      html  css  js  c++  java
  • 【React】在React中 JSX 代码如何转成 JS 代码?

    一、介绍

    写 React 代码的朋友应该都是直接写 JSX 代码,JSX 让我们可以在 JS 中直接写 HTML 代码,可阅读性较高。本章节主要介绍 JSX 通过 babel 转换后会生成什么样式代码。

    二、案例

    1. div 标签
    <div></div>
    

    通过 babel 转换后:

    React.createElement("div", null);
    
    1. 带 id 属性的 div 标签
    <div id="leo">pingan</div>
    

    通过 babel 转换后:

    React.createElement("div", { id: "leo" }, "pingan");
    
    1. 带有单个子元素的 div 标签
    <div id="leo" key="index">
      <span>hello</span>
    </div>
    

    通过 babel 转换后:

    React.createElement("div", {
      id: "leo",
      key: "index"
    }, React.createElement("span", null, "hello"));
    
    1. 带有多个子元素的 div 标签
    <div id="leo" key="index">
      <span>hello</span>
      <span>hello</span>
    </div>
    

    通过 babel 转换后:

    React.createElement("div", {
      id: "leo",
      key: "index"
    }, React.createElement("span", null, "hello"), 
       React.createElement("span", null, "hello")
    );
    
    1. 函数组件
    function Leo (){
    	return <span>hi leo!</span>
    }
    
    <Leo></Leo>
    

    通过 babel 转换后:

    function Leo() {
      return React.createElement("span", null, "hi leo!");
    }
    
    React.createElement(Leo, null); 
    

    需要特别注意的是:

    在写 React 组件时,约定组件名称首字母必须是大写React.createElement 方法会根据第一个参数的首字母是否是大写,来判断要翻译成变量还是字符串

    当我们组件首字母为小写时:

    function leo (){
    	return <span>hi leo!</span>
    }
    
    <leo></leo>
    

    通过 babel 转换后:

    function leo() {
      return React.createElement("span", null, "hi leo!");
    }
    
    React.createElement("leo", null);
    

    可以看出,React.createElement 第一个参数变为字符串 "leo" 。对于 React 来说,第一个参数如果是字符串类型,则会被作为 HTML 原生 DOM 节点来渲染,运行时便会报错。

    关于我

    本文首发在 pingan8787个人博客,如需转载请保留个人介绍。

    Author 王平安
    E-mail pingan8787@qq.com
    博 客 www.pingan8787.com
    微 信 pingan8787
    每日文章推荐 https://github.com/pingan8787/Leo_Reading/issues
    ES小册 js.pingan8787.com

    微信公众号

    bg

    个人博客:http://www.pingan8787.com 微信公众号【前端自习课】和千万网友一起,每日清晨,享受一篇前端优秀文章。 目前已连续推送文章 600+ 天,愿每个人的初心都能一直坚持下去!
  • 相关阅读:
    21.Android之SQLite数据库学习
    20.(转)Android的样式(Style)和主题(Theme)
    19.Android之文件存储方法学习
    18.Android之SharedPreferences数据存储学习
    17.(转) Android之四大基本组件介绍与生命周期
    16.(转) Android之Support v4、v7、v13的区别和应用场景
    15.Android中LinearLayout布局一些小记录
    14.Android之Layout布局学习
    13. (转) Android一些布局属性详解
    12.Android之Tabhost组件学习
  • 原文地址:https://www.cnblogs.com/pingan8787/p/11838048.html
Copyright © 2011-2022 走看看