Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

JSX 是准引用

Posted on 2023-01-24

我最近一直在编写相当多的 JSX/TSX 代码,并且对这种编程模型有一种奇怪的熟悉感。这是我无法真正放置的东西,直到我再次破解我的 Emacs 配置后取得突破。当您使用 JSX 在 JavaScript 函数中编写 HTML 时,您使用的是准引用。

苍井空
<葵>准引用?那是什么?

英雄形象天空印记由 Waifu Diffusion 生成的图像 — 发光的印记、印记、禅宗、阴阳、道教、风景、世界贸易中心、和平、明日方舟、科幻、符文能量、法术

我认为解释这一点的最简单方法之一是使用 Emacs Lisp。 Emacs Lisp 是GNU Emacs的扩展语言,我使用的文本编辑器我非常沉迷于使用在过去十年中一直使用。

Lisp 的主要概念之一是代码就是数据,而数据就是代码。当您使用 Lisp 编写代码时,您正在编写计算机将其解释为代码的链表。例如,考虑一下 Lisp 的这一小部分:

 ( quote (+ 3 4 ))

您可以使用Mx ielm ielm Emacs 中使用 ielm 对​​其进行评估:

马拉是黑客
< Mara > Mx是 Emacs 中的“alt-x”。
 *** Welcome to IELM *** Type (describe-mode) for help. ELISP> (quote (+ 3 4)) (+ 3 4)

将代码引用到数据中是您在 Lisp 中经常做的事情,因此有一个使用单引号字符'来执行此操作的快捷方式:

 ELISP> '(+ 3 4) (+ 3 4)

这很好用,但有时您需要将变量的值放入一些数据中。假设您有这段 Lisp 代码:

 ( let ((filename " foobar.txt ")) '(filename)) 

马拉是黑客
< Mara > (let ((var1 value) (var2 value)) code)是你在 Lisp 中声明临时变量的方式。这里变量名filename设置为"foobar.txt" 。每个变量声明都是一个包含两个元素的列表:变量名及其值。值可以是数据或被评估为数据的代码。

如果将其放入 Emacs Lisp 解释器中,您将无法返回您的想法:

 ELISP> ( let ((filename " foobar.txt ")) '(filename)) (filename)

您需要有一些方法来引用您想要成为数据的代码,然后有一些方法可以将数据取消引用返回到代码中。幸运的是,Emacs Lisp 允许您使用他们称为Backquoting的结构来做到这一点:

 ELISP> ( let ((filename " foobar.txt ")) `(,filename)) (" foobar.txt ")

反引号`让您像单引号'一样引用所有内容,但您也可以使用逗号取消引用数据,将数据转回代码。这使您可以构建复杂的数据结构,如属性列表,以转换为 HTTP 表单数据:

 ELISP> ( let ((fname (buffer-name)) (content " Hi there ")) `((fname . ,fname) (content . ,content))) ((fname . " *ielm* ") (content . " Hi there ")) 

葵是欢呼
< Aoi > 所以准引用让你可以混合数据和代码,但这与 JSX 有什么关系?
马拉是啊哈
< Mara > JSX 是相同的东西,只是语法略有不同。

JSX是 JavaScript 的语法扩展,可让您将 HTML 数据与 JavaScript 代码混合。这很像 Lisp 中的准引用。考虑这个小的 JSX 代码块:

 const name = "Aoi"; const header = ( <div> <h2>{name}</h2> <p>Hi there, {name}! How are you doing today?</p> </div> ); document.write(header);

这会将此 HTML 的等效内容写入当前页面:

 < div > < h2 >Aoi</ h2 > < p >Hi there, Aoi! How are you doing today?</ p > </ div >

您在括号()内引用 HTML 数据,并使用大括号{}将 JavaScript 代码取消引用到 HTML 数据中。

葵咧嘴一笑
< Aoi > 所以 JSX 对 JavaScript 中的 HTML 所做的事情与准引用对 Lisp 中的列表所做的事情相同!它允许您混合代码和数据,以便您可以轻松地组装任何您想要的东西。
马拉很开心
<马拉> 是的!您最终会在不同的编程工具中找到很多这样的东西。许多工具互相窃取想法,整个行业中有更多类似的模式。你还能找到什么?

原文: https://xeiaso.net/blog/jsx-quasi-quoting

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Lou Plummer
  • Matt Stoller
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • Thinking Deep & Wide
  • Tim Kellogg
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme