<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>JSX on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/jsx/</link><description>Recent content in JSX on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 26 Dec 2024 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/jsx/index.xml" rel="self" type="application/rss+xml"/><item><title>JSX</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/react/jsx/</link><pubDate>Tue, 17 Dec 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/react/jsx/</guid><description>&lt;p&gt;时下虽然接入 &lt;code&gt;JSX&lt;/code&gt; 语法的框架越来越多，但与之缘分最深的毫无疑问仍然是 &lt;code&gt;React&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;2013 年，当 &lt;code&gt;React&lt;/code&gt; 带着 &lt;code&gt;JSX&lt;/code&gt; 横空出世时，社区曾对 &lt;code&gt;JSX&lt;/code&gt; 有过不少的争议，但如今，越来越多的人面对 &lt;code&gt;JSX&lt;/code&gt; 都要说上一句“真香”！我们就来一起认识下这个“真香”的 &lt;code&gt;JSX&lt;/code&gt;，聊一聊“&lt;code&gt;JSX&lt;/code&gt; 代码是如何‘摇身一变’成为 &lt;code&gt;DOM&lt;/code&gt; 的”。&lt;/p&gt;
&lt;p&gt;开始之前请先思考几个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;JSX&lt;/code&gt; 的本质是什么，它和 JS 之间到底是什么关系？&lt;/li&gt;
&lt;li&gt;为什么要用 &lt;code&gt;JSX&lt;/code&gt;？不用会有什么后果？&lt;/li&gt;
&lt;li&gt;&lt;code&gt;JSX&lt;/code&gt; 背后的功能模块是什么，这个功能模块都做了哪些事情？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;面对以上问题，如果无法形成清晰且系统的思路，那么很可能是把 &lt;code&gt;JSX&lt;/code&gt; 想得过于简单了。大多数人只是简单地把它理解为模板语法的一种，但事实上，&lt;code&gt;JSX&lt;/code&gt; 作为 &lt;code&gt;React&lt;/code&gt; 框架的一大特色，它与 &lt;code&gt;React&lt;/code&gt; 本身的运作机制之间存在着千丝万缕的联系，上述 3 个问题的答案，就恰恰隐藏在这层“联系”中。&lt;/p&gt;
&lt;h2 id="jsx-的本质javascript-的语法扩展"&gt;JSX 的本质：JavaScript 的语法扩展&lt;/h2&gt;
&lt;p&gt;JSX 到底是什么?看看 React 官网给出的一段定义：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;JSX&lt;/code&gt; 是 &lt;code&gt;JavaScript&lt;/code&gt; 的一种语法扩展，它和模板语言很接近，但是它充分具备 &lt;code&gt;JavaScript&lt;/code&gt; 的能力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;“语法扩展”这一点在理解上几乎不会产生歧义，不过“它充分具备 &lt;code&gt;JavaScript&lt;/code&gt; 的能力”这句，却总让人摸不着头脑，&lt;code&gt;JSX&lt;/code&gt; 和 &lt;code&gt;JS&lt;/code&gt; 怎么看也不像是“一路人”啊？这就引出了“&lt;code&gt;JSX&lt;/code&gt; 语法是如何在 &lt;code&gt;JavaScript&lt;/code&gt; 中生效的”这个问题。&lt;/p&gt;
&lt;h3 id="jsx-语法是如何在-javascript-中生效的认识-babel"&gt;JSX 语法是如何在 JavaScript 中生效的：认识 Babel&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Facebook&lt;/code&gt; 公司给 &lt;code&gt;JSX&lt;/code&gt; 的定位是 &lt;code&gt;JavaScript&lt;/code&gt; 的“扩展”，而非 &lt;code&gt;JavaScript&lt;/code&gt; 的“某个版本”，这就直接决定了浏览器并不会像天然支持 &lt;code&gt;JavaScript&lt;/code&gt; 一样地支持 &lt;code&gt;JSX&lt;/code&gt;。那么，&lt;code&gt;JSX&lt;/code&gt; 的语法是如何在 &lt;code&gt;JavaScript&lt;/code&gt; 中生效的呢？&lt;code&gt;React&lt;/code&gt; 官网其实早已给过我们线索：&lt;/p&gt;</description></item></channel></rss>