《首尔之春》是一部很久之前就加入待看片单的电影,终于在昨天晚上看完了。
《首尔之春》是韩国 2023 年的票房冠军,也是韩国电影史上首部根据双十二政变事件改编的影片,由《阿修罗》导演金性洙执导,黄晸珉、郑雨盛、李圣旻、朴海俊、金成均主演,2023 年 11 月 22 日在韩国上映。
看完直接先说几点感想吧。
导演能够将这么庞大复杂的人物关系梳理并展开清楚,这一点非常了不起,和《1987 黎明到来的那一天》不一样的是,1987 中故事是分段进行的,虽然人物关系也非常复杂,出场人物也非常多,但划分到具体段落中观众只需要记简单的几个就行了。而在《首尔之春》中所有出场的人物全部都是围绕着这一件事情发展而展开的,从安保部,到青瓦台,从总长家到陆军总部,从反叛军地堡到首尔警备司令部,出场的人物一个接一个,地点也一个接着一个更换,但我在观察的过程中竟然没有一丝感觉到混乱,只是事后回想起来才发现出现的人物数量之多。不过我回想起来,可能也是我看韩影比较多,里面的主角配角,甚至只出现一两分钟镜头的演员都是老面孔,看的时候也是不停地被这个超豪华的演员阵容惊讶到。
对于这一段历史的,其实我没有很了解,虽然我看了一两本韩国近代史的书,读过一两篇关于光州民主化运动(518 事件)的维基百科和文章,但具体 12 月 12 日那一天发生了什么,其实我还是不了解的,但现实的历史发生了什么我还是大致知道的。所以在观看的过程中,我明明知道黄政民饰演的全斗光就是全斗焕,他会成为改变韩国历史进程的人,但在前半段看到他遇到这种各样问题的时候,还是会不断地想要了解他是怎么一步步完成夺权的,这又是一个吸引我继续看下去的点。另外就是我看过太多的影片,1979 年那个时间前后发生的其他「故事」,所以理解这部分历史相关的倒也还好,比如讲述 1979 年发生的刺杀事件《南山的部长们》,比如 1980 年的光州民主化运动的《出租车司机》《华丽的假期》,以及 1987 年的《1987:黎明到来的那一天》,还有倒序方式讲述那一整段历史的《薄荷糖》,更不用说很多以那个时代为背景的电影《普通人》《南营洞 1985》《五月的青春》等等。
程序正当,看电影的过程中其实我有一点我还挺想拿出来说说的,虽然我知道这个就是事实上的军事政变,但黄政民从始至终都需要总统的签字,这一条线索贯穿了全篇,从开始谋划抓捕总长开始这个就是一个必要条件,虽然过程中一直没有拿到「授权」,但最终一幕总统在被迫之下还是签署了。我看到这一个地方的时候其实还感觉停有意思的。在片中能明显的看到黄政民只有两颗星,但是总长我没有记错的话应该是 4 颗星,也就是说一个权力明显不对等的两个人,却发生了一个中层将军直接绑架总长的事件,谁授予的权力呢?其实这个地方也能看到韩国的制度设置里面,虽然经过了朴正熙几十年的独裁统治,但这样一套权力等级制度虽然还在但却错综复杂,尤其是当朴正熙这样一位独裁者突然被枪杀之后产生了权力的极度不平衡。这也是我之前曾经和朋友说过的,一个独裁的体制并不一定会产生极恶的状况,但是一旦权力真空那么发生灾难是必然的。黄政民的权力,武装力量来自于自己,但他却需要一个正当的理由,一个由表面政府首脑签署的文件,才能完成他的整个计划。当我想到这里的时候,不经回想起,韩国民主化运动一路过来的不易,但是也能想到他们成功的必然,在电影里面也非常简短地有出现,1979 年就已经有了完整的媒体监督(虽然还在被压制),已经拥有了非常完整的权力监督体制(虽然还能被颠覆),已经拥有了政治,军事不能混为一体的思想。当看到这里的时候,其实就已经能够预想到最后只要唤醒大部分的民众自然而然就得到了民主。
在看到电影一半的时候我就已经开始为所谓的「正义」一派捏一把冷汗了,而整部电影也用事实告诉普罗大众,如果对于一个「权力」放任不管,那么接下来就是迎接被放出全力牢笼的猛兽的作恶,接下来 1987 中提到的严刑逼供,光州事件中的大规模镇压,已经长达近 10 年的军政府统治,让韩国的民主化运动再次蒙上了一层阴影。
电影到一半左右当黄政民开始策划政变开始,节奏逐渐加快,接下来的剧情发展非常快速,我也知道了为什么韩国年轻人有看这部电影的心率挑战,气愤值挑战,所谓正方的一切行为看起来都非常的懦弱,除了郑雨盛饰演的首尔警备司令官的角色还有一点气度,其他什么国防长官,一听到枪响就逃到了美军基地,还有陆军司令部反复变化的命令,更还有丝毫没有作用的总统,这一些人物的出现那故事的结局已经是必然。
说完了这么多,再来说一说我觉得这部片子的缺点吧。
首先有一个让我一下子出戏的特效镜头,就是有一个转场镜头,就是在光化门的李舜臣将军像那边,那个转场的画面特效实在太差了。
第二个缺点就是陆军总部,国防长官地刻画都太脸谱化了,虽然历史上的这些人物具体发生了什么很难去再现,但是电影中的表现都是太「简单」,当然可能也受限于篇幅,除了几个主角的刻画比较丰满之外,其他人都是非常潦草的一笔。
大家可能会好奇为什么明明是发生在 12 月 12 号的事情,片名里面却带着「春」字,全斗焕凭借政变,登上政治最高位,武力镇压民主运动,迫害民主人士,推行军事独裁,结束了大家以为的朴正熙死亡可能带来的民主化春天。在电影的片尾有这样一行字幕。
찬란했던’서울의봄’은그렇게 끝났다 灿烂的「首尔之春」就这样结束了
在 macOS 下录制屏幕的工具有很多,可以使用系统自带的,也可以使用自带的 QuickTime Player,但是这两个自带的工具,可能都有一些限制,比如不能录制系统自带的声音。
后来我找到了一款用来起来比较舒服的录屏工具,也能够录制系统声音,Screen Recorder by Omi,但 Omi 在导出高清视频的时候有限制,当然如果比较愿意折腾也可以尝试一下 [[Open Broadcaster Software(OBS)]],但今天我来介绍一款新的,操作和使用都比较简单的录屏工具 —- [[FocuSee]]。
FocuSee 是一款专注于屏幕录制的工具,之前有一款支持点击放大效果的录屏软件 [[ScreenFlow]],FocuSee 同样也能达到。
特点:
启用权限
当完成录制之后会出现一个视频编辑器,在这个编辑器中可以做简单的编辑,还可以定义鼠标样式。
FocuSee 的价格不低,但好在是买断制的。
相较于 [[Screen Studio]] 稍微便宜一点点。
FocuSee 是一款收费的软件,如果你可以折腾那么,OBS 也有一个插件可以实现视频的缩放,可以使用 Python 脚本。可以参考这个教程。
[[MVP]],全称是 Minimum Viable Product ,最小化可实行产品。这个概念是 Eric Ries 在 [[精益创业]] 一书中关于精益创业(Lean Startup)的核心思想,意思是用最快、最简明的方式建立一个可用的产品原型,通过这个最简单的原型来测试产品是否符合市场预期,通过不断的快速迭代来修正产品,适应市场需求。
简单地说,就是在做一个新产品时,不要一下子做一个尽善尽美的产品,而是先花费最小代价做一个「可用」的产品原型,验证这个产品是否有价值,是否可行。通过迭代来完善细节。
那如何来定义「可用」呢?可以问自己如下的问题
发现用户的需求,然后根据这些需求从而确定出产品的核心功能,关键特性,这些功能是产品成功的基础。集中资源和时间来开发这些功能,而不是试图一次性实现所有的功能。
MVP 核心思想在于快,通过设定精确的目标,构建最小版本,快速发布,快速验证来构建产品。
这一步可以通过 [[Excalidraw]] Azure Figma 等等工具来快速构建自己的想法,交互流程,通过流程图,思维导图等等工具来构建用户交互界面。
将产品推到市场获取潜在的客户之后,需要积极地手机用户反馈的数据,了解用户对产品的喜好,需求和问题。可以通过如下的方式来收集验证。
持续迭代是 MVP 思想另外一个重要的部分,持续改进和发展产品,逐步添加新功能和特性,来满足变化的用户需求。
我们从笔记软件的发展历程来看就能知道为什么迭代是如此重要。过去 10 年里面有一家成长为独角兽的公司 Evernote,但是随着互联网发的发展,协同编辑,以及 Markdown,双向链接的出现,即使是一款过去非常主流的笔记软件也会面临用户流失的问题。
与 MVP 类似的还有一个概念叫做 MMF,Minimum Marketable Feature,最小可销售特性。这个也是产品开发非常重要的一个概念,它强调的是在产品中添加最小限度可以被销售或交付的功能。与 MVP 不同,MMF 更侧重于产品的营销和销售能力,而不仅仅是验证产品概念和核心功能。
最后使用 [[Marc Lou]] 的话来做一个总结,「忘记 SaaS,Passive income,The perfect co-founder,从一个 Feature,One-time Payment,Repeated small wins 开始」。1这句话恰好印证了 MVP 思想,核心功能,收费,然后不断验证并迭代更新。
在家里面我一直使用我的斐讯 T1 电视盒子,自己刷了系统之后,不需要更新,也没有烦人的软件升级,而且整个系统没有广告,在这样的情况下,我使用了近 5 年,对于一个不到 100 元的电视盒子来说实在是太值了,并且用到如今并没有出现任何较大的问题,正常情况下我使用 Kodi 观看本地网络磁盘中的 10 GB 左右的 1080p H264 视频也完全没有问题,并且 Android 生态的丰富程度,让我可以直接在 T1 上安装 Bilibili 客户端,也可以安装 YouTube,自建的 Plex,更不用说还有国内非常多的视频网站,以及丰富的直播应用,但一般情况下我使用最多的还是 Kodi,Bilibili,YouTube 和 Plex,然后还会进行一些 [[DLNA]] 投屏和串流,基本满足了我 99% 的需求。
但为什么我又要买一台 Apple TV 呢?原因主要有这么几点。
所以我决定更新一下 T1,我有几个选项
因为很早就开始关注 Nvidia Shield TV,但是当时 T1 一直非常棒,所以没有淘汰的理由,从 2017 年关注到 2024 年,竟然只在 19 年更新了一次,之后 4 年该产品没有任何更新,所以肯定第一时间放弃了,我还在 Reddit 上的发帖问 Nvidia 还会更新吗,得到的网友回答是没有任何消息。
而 Amazon 的 Fire TV 和 Google 的 Chromecast 也是很早就开始关注,因为同是 Android 系统,所以很多 APK 可以直接安装,但是当时人在大陆,所以用起来肯定有一些水土不服,需要网络代理,很多应用还无法使用,所以非常干脆的不考虑,但是去年到东京居住那么这两个选项又放到了考虑选项,我在 Yodibashi 线下曾经尝试了一下 Chromecast,说实话没有我想象的那么流畅,所以当时就放弃了。而 FireTV, Amazon 经常做五折促销,一度想要下单,但也是忍住了,在 YouTube 上看了几个测评之后感觉还是一台不错的电视盒子。
而最后一个 Apple TV 本来是没有在考虑范围的,生态不丰富,没有 Kodi(安装起来非常麻烦),没有 Bilibili 客户端,我 90% 时间用的应用都没有,并且投屏似乎还不支持 [[DLNA]],Apple 有自己的一套自己的协议 AirPlay。但看了几个测评视频之后发现这些问题似乎目前都还都有解,Kodi 可以用 Infuse,VidHub 等播放器,Bilibili 客户端也有几个三方的客户端 Miao Project,Cheers,也可以选择投屏。而投屏和苹果的生态协作使用体验比较良好。
确定好 Apple TV 之后,就开始调查 Apple TV 的具体型号。
型号 | Model | 日版制品番号 | 发布年份 | 颜色 | 容量 | 视频输出 | 无线网络 | 蓝牙 | 发售价格 (¥) |
---|---|---|---|---|---|---|---|---|---|
Apple TV (第 1 代) | A1218 | MA711J/A(40GB) MB189J/A(160GB) | 2007 年 3 月 | 铝色 | 40GB | 720p | 802.11b/g | 无 | - |
Apple TV(第 2 世代) | A1378 | MC572J/A | 2010 年 9 月 | 黑色 | 8GB | 1080p | 802.11n | 有 | 8,200 円+税 |
Apple TV (第 3 代) | A1427 A1469(Rev A) |
MD199J/A | 2012 年 3 月 | 黑色 | 8GB | 1080p | 802.11a/b/g/n | 有 | 8,200 円+税 |
Apple TV HD (第 4 世代) | A1625 | MHY93J/A 32 GB MGY52J/A(32GB) MLNC2J/A(64GB) |
2015 年 10 月 | 黑色 | 32GB 或 64GB | 1080p | 802.11ac | 有 | 32GB:18,400 円+税 64GB:24,800 円+税 |
Apple TV 4K (第 1 代) | A1842 | MQD22J/A(32GB)MP7P2J/A (64GB) | 2017 年 9 月 | 黑色 | 32GB 或 64GB | 2160p (4K) | 802.11ac | 有 | 32GB:21,780 円(税込) 64GB:23,980 円(税込) |
Apple TV 4K (第 2 代,MQD22J/A 32GB MXH02J/A 64GB) | A2169 | MXGY2J/A(32GB) MXH02J/A(64GB) |
2021 年 4 月 | 黑色 | 32GB 或 64GB | 2160p (4K) | 802.11ax (Wi-Fi 6) | 有 | 32GB:21,800 円(税込) 64GB:23,800 円(税込) |
Apple TV 4K (第 3 代 ) | A2737(64GB) A2843(128GB) |
MN873J/A(64GB) MN893J/A(128GB) MN893X/A 64 澳洲版本 |
2022 年 4 月 | 黑色 | 64GB 或 128GB | 2160p (4K) | 802.11ax (Wi-Fi 6) | 有 | 64GB:19,800 円(税込) 128GB:23,800 円(税込) |
在简单的了解一下之后 Apple TV 4K 目前推出到了第三代(2022 年版本)
综合上面的所有的升级内容,我个人判断这些升级对我目前的使用影响不大,所以就开始在 Mercari 订阅了关键字,正好这两天看到第二代 Apple TV(64GB) 13410 JPY,看上去价格也合适就下单了。
开机设置非常简单,直接按照指示手机靠近 Apple TV 就能关联上自动通过手机来进行初始化,这一点 Apple 的一贯性还是做的不错的。
进入系统之后就是开始安装必要的初始化应用,来先满足我的基本需要,但是让我感到惊讶的是因为我已经通过 iOS 下载过 VidHub 所以 Apple TV 里面通过 iCloud 同步将我的配置都同步过去了,这一点还是非常舒服的。
列举了上面这么多的应用,我实际使用最多,比较推荐的几个应用
VidPlay 一款 可高级玩法的 VOD 播放器
功能简介
▎ 目前 iOS 端正在开发适配中
VidPlay 交流群 (https://t.me/CubePlayer) VidPlay 高级玩法交流群 (https://t.me/+XHhN9aAZ8j5hZGY5)
UnPlay 是一款创新的时钟/投屏应用,为用户提供多样化的场景体验。不仅可以作为时钟, 还能使用 DLNA 协议推送流媒体到 Apple TV 上增加大屏体验
需要注意的是,如果您的 Apple TV 和苹果设备没有连接在同一个 Wi-Fi 网络下,投屏可能会失败。
Datadog 成立于 2010 年,是一家面向开发者、IT 运维团队及业务人员的云监控平台公司,致力于为企业客户提供底层系统和上层应用的实时监控、分析能力。
日志管理产品,可观测数据 log, metric, trace 集一身的方案。Datadog 的日志查询有一套自己的语法,但是都比较好了解,所以这里也整理一下。
查询过滤器由两部分组成 terms (术语) 和 operators(运算符)。
两种类型的术语:
test
hello world
将多个术语通过如下的操作符组成形成复杂的查询语句。
下面这一些是特殊字符
+ - = && || > < ! ( ) { } [ ] ^ " “ ” ~ * ? : \
如果要查询这些特殊字符需要使用 \
来转义。
按照特定的属性进行搜索,可以使用 @
指定。
比如想要查询 url 是 example.com
的记录
@url:example.com
更多例子
@http.url_details.path:"/api/v1/test"
搜索 http.url_details.path 中与 /api/v1/test
匹配的所有日志@http.url:\/api\/v1\/*
搜索包含以 /api/v1
开头的 http.url
属性中的值的所有日志@http.status_code:[200 TO 299] @http.url_details.path:\/api\/v1\/*
包含范围 code 和以 /api/v1
开头的属性的日志-@http.status_code:*
搜索不包含属性的日志?
匹配单个字符*
通配比如所有的接口请求都有延迟
@http.response_time:>1000
或者搜索特定的范围
@http.status_code:[400 TO 499]
匹配带有标签 env:prod
或标签 env:test
的所有日志
env:(prod OR test)
匹配包含标签 env:prod
且不包含标签 version:beta
的日志
(env:prod AND -version:beta)
之前写过一篇文章如何搭建自己的 AdGuard Home 去广告,过去很久了,现在在一台新的 Ubuntu 设备上再次安装 [[AdGuard Home]],再次记录一下如何解决 53 端口被占用的问题。
因为 AdGuard Home 要通过 53 端口提供 DNS 解析的功能,但是默认情况下 Ubuntu 的 systemd-resolved 会占用 53 端口来提供本地的 DNS 解析缓存服务。
使用 sudo lsof -i :53
或者 netstat 命令查看
编辑配置文件
sudo vim /etc/systemd/resolved.conf
修改文件
[Resolve]
DNS=1.1.1.1
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#DNSOverTLS=no
#Cache=yes
DNSStubListener=no
#ReadEtcHosts=yes
将其中的 DNS 和 DNSStubListener
字段做如上修改。
然后重启服务
sudo systemctl restart systemd-resolved.service
再次查看 53 端口,没有被占用,之后就可以启动 AdGuard Home 了。
systemd-resolved 是 systemd 中提供的一个 DNS 解析器服务。它可以自动管理 /etc/resolv.conf 文件,并提供一些额外的功能,例如:
systemd-resolved 默认情况下是启用的。如果启用了 systemd-resolved,它会将 /etc/resolv.conf 文件配置为指向一个符号链接,该符号链接指向 systemd-resolved 管理的 stub-resolv.conf 文件。stub-resolv.conf 文件包含了 systemd-resolved 提供的 DNS 服务器信息。
如果您想要手动配置 /etc/resolv.conf 文件,需要先禁用 systemd-resolved 服务。您可以通过以下命令禁用 systemd-resolved 服务:
sudo systemctl disable systemd-resolved
禁用 systemd-resolved 服务后,/etc/resolv.conf 文件将不再被自动管理。您可以直接编辑 /etc/resolv.conf 文件,并重启网络服务使更改生效。
Hono 是一个运行在边缘节点的 JavaScript Edges Web 框架,可以在任何支持 JavaScript 运行的服务上,包括 Cloudflare Workers,Fastly Compute@Edge,Deno,Bun,Vercel,Netlify,Lagon,AWS Lambda,Lambda@Edge 和 Node.js。
Hono 的特点就是简单,轻量,快。
hono/tiny
只有 14kB,零依赖下面是一些具体的使用 Hono 的产品
创建项目
pnpm create hono my-app
我创建了一个项目,接受上传图片,并生成一个随机的图片名称,然后上传到 Cloudflare R2。代码见GitHub。
然后配套 uPic 直接上传到 R2,然后获取 R2 的直接链接。
Head
Content_Type: multipart/form-data
Authorization: Bearer my-secret-token
采用 form-data
上传,文件 key 是 file。
因为时不时需要有打印和复印的需求(日本政府总有一些奇怪的手续需要提供纸质的材料),之前看到有人出家用打印机就用 3000 JPY 买了一台,这是一台 Canon TS3330。下面记录一下我自己的初始化过程以及更换墨盒的过程,以备自己后续查看。
佳能打印机 A4 喷墨多功能 PIXUS TS3330 白色 Wi-Fi 兼容。
墨盒
canon ts3330 説明書
或者访问 https://ij.start.canon 访问,然后查询型号,查看交互式教程。
或者直接访问 TS3330 的手册。
以防万一,我也做了一个备份。
首先将打印机连接电源,然后按下电源键启动。等待启动完成,将打印机前部分的往下拉开。
然后就能看到墨盒的位置
左边是彩色的,右边是黑白的。
安装的时候有一定的倾角。
安装的时候需要有一个向上的按压操作。
直至两边对齐
访问 https://ij.start.canon 下载桌面版的应用,根据应用上的提示完成 WiFi 初始化。
当完成 WiFi 连接之后,打印机在本地网络中就会存在一个 IP 地址,直接通过浏览器访问这个 IP 地址,可以对打印机进行一些管理。比如
今天在浏览 LinkedIn 的时候,突然看到日本公司的 JD 中对语言的要求其中出现了一个关键字 CEFR C1 / B2 。好奇心使然,让我想了解一下这个我没有见到过的英语能力等级是什么。
在中文的语境中经常会看到 CET-4,CET-6,或者 TOEFL,ITLTS,甚至前不久还看到了 [[Duolingo]] 推出的英语能力测试,Duolingo 的英语能力测试因为能通过在线获取,所以在疫情期间还得到了很大的发展。
CEFR 是 Common European Framework of Reference for Languages 的缩写,即欧洲语言共同参考框架。它是一个由欧洲委员会制定的语言能力分级系统,用于描述语言学习者在不同水平上的语言能力。
CEFR 将语言能力分为六个级别:A1、A2、B1、B2、C1 和 C2。C1 是第五个级别,属于高级水平。
CEFR C1 水平的语言学习者能够:
CEFR C1 水平的语言学习者可以胜任以下任务:
在我调查的过程中发现了一个网站 EF SET 这个网站也有对于 C1 的具体介绍,这个阶段,是能够熟练应用英文进行交流,对大部分的事物都可以给出具体准确的描述而不需要提前准备。
最后分享一下我进行的 15 分钟的测验,希望明年能上到 90% 以上吧。
这一期的 21 天计划中,我将了解和学习 React 并使用 React 制作一个简单的网站列入了计划,和之前学习了解 [[Lavarvel]] 一样,我在笔记里面制作了一个短期的学习计划,并看了一些官网的教程和书籍的目录,制定了几大块的知识点。这是这个系列的第一篇文章。
[[React]] 是一个用来构建用户界面的 JavaScript 库,用于构建 UI 界面,起源于 Facebook 的内部项目,用来构建 Instagram 的网站,于 2013 年 5 月开源。React 拥有较好的性能,代码逻辑简单,现在已经有很多项目使用 React 来实现,并且占据了当前前端开发的市场,另外一大山脉 [[Vue]] 等有时间再看看吧。
和之前 [[Laravel]] 一样,主要的目的是为了可以快速实现一些小的想法,之前有很多想法都停留在 Todo-List 里面,如果有一个顺手的工具,就可以快速实现。另外一个目的就是为了看懂现在的开源代码,以及一些感兴趣的项目。初步的目的只是为了能看懂,并且能在此基础上做一些小的改动吧。
为什么要学 React
React 会在内存中创建 Virtual DOM,React 会首先将修改应用到内存的 Virtual DOM 中,然后再将修改反应到浏览器的 DOM 中。React 只会去渲染需要修改的内容。
每一次学习新的东西,最开始就是要了解概念,React 中有一些非常核心的概念,这里先列举一下,之后还会展开。
下面的方法定义了一个最基本的组件,包括了一个叫 name 的状态。
function MyComponent() {
const [name, setName] = useState("John Doe");
return (
<div>
<h1>Hello, {name}</h1>
<button onClick={() => setName("Jane")}>Click here to set name</button>
</div>
);
}
因为我使用 asdf ,所以直接安装 Node.js 即可。
asdf install nodejs 20.10.0
TypeScript 是一种向 JavaScript 代码添加类型定义的常用方法。TypeScript 天然支持 JSX——只需在项目中添加 @types/react
和 @types/react-dom
即可获得完整的 React Web 支持。
要使用 React,首先需要 npm 和 Node.js 环境。
通过 npm 安装, 使用 create-react-app
构建一个 React 开发环境,这个环境包括了常用的工具比如 [[Webpack]],ESLint 等。
npx create-react-app my-react-app
运行代码
npm start
JSX 是一种 JavaScript 语法扩展,用于将 HTML、JavaScript 和 CSS 代码混合在一起。JSX 使 React 开发人员能够以更简洁的方式编写代码。
JSX 语法简化了 React 的开发,在编译时会自动转化为 JavaScript 代码,并编译成输出 HTML。
可以来看一个简单的例子
const MyComponent = () => {
return (
<div>
<h1>Hello, world!</h1>
<button onClick={() => console.log("Hello, world!")}>Click me</button>
</div>
);
};
return (
<div>
<h1>Hello World!</h1>
<p>This is my first React component.</p>
</div>
)
className
而不是 class
<div className="my-class">This element has a CSS class.</div>
<div>{myVariable}</div>
<button onClick={handleClick} className="btn">Click me!</button>
<div></div>
<img src="my-image.jpg" alt="My Image"/>