国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

React開發(fā)者們的Solid.js快速入門教程

開發(fā)
本文是關(guān)于 Solid.js 與 React 之間的相似、不同以及你需要留意的陷阱。

在 2021 年的 JavaScript 調(diào)查問卷中,黑馬 Solid.js 一騎當(dāng)先登上榜首,在用戶滿意度的評分上連超兩大競爭對手,React 和 Svelte。雖然 React 仍有著不錯(cuò)的市場占有率,但要小瞧了 Solid.js 那可是犯了個(gè)大錯(cuò)誤。

React 開發(fā)者們會(huì)發(fā)現(xiàn) Solid 非常眼熟

先看一眼下面這段用 Solid.js 寫的簡單計(jì)數(shù)程序:

function Counter() {
const [count, setCount] = createSignal(0);
return (
<div>
<p>The current count is: {count()}</p>
<button onClick={() => setCount((x) => x + 1)}>Plus</button>
</div>
);
}

我敢打包票,即使從來沒接觸過 Solid.js,React 的開發(fā)者們讀這段代碼也是完全不費(fèi)力。這是因?yàn)?Solid.js 在 API 上和 React 有著異曲同工之妙。其中一個(gè)原因是 Solid.js 也使用了 JSX,意味著 React 開發(fā)者們刻在 DNA 里關(guān)于元素和組件的應(yīng)用方式也會(huì)在 Solid.js 里體現(xiàn)。比如說下面這個(gè)“歡迎”組件,我們完全可以以和 React 應(yīng)用類型的方式來實(shí)現(xiàn):

function Welcome(props) {
return <p>Welcome, {props.name}</p>;
}

這二者之間的相似之處不僅限于此,Solid.js 在圖元的使用上也和 React 的 hook 類似,大部分 Solid 響應(yīng)式圖元的 API 你都可以在 React 的 hook 找到對應(yīng)的存在。

但請注意,Solid.js 可不是 React API 的復(fù)制品,React 應(yīng)用直接放到 Solid.js 中運(yùn)行是肯定行不通的。但不得不說,有這么個(gè)和 React 如此相似的 API 對大部分開發(fā)者來說都是件好事,至少學(xué)習(xí)曲線不會(huì)太過陡峭。

一切都是為了圖元

盡管這二者在表面上有如此多的相似點(diǎn),但他們之間的不同之處才是讓 Solid.js 得以在眾多競爭者中脫穎而出,比如說,Solid.js 的應(yīng)用并不是圍著組件轉(zhuǎn)的。Solid 曾驕傲地稱他們的組件為“消失的組件”。在組織代碼階段,Solid 的組件很有幫助,但等到了初始的渲染階段,你就再也見不到它們了。

與 React 不同,Solid.js 的宇宙中心其實(shí)是圖元。Solid 有著一套“完善的響應(yīng)式圖元”。這些圖元功能類似 React 的 hook,但又有著些許不同。對 React 來說,hook 是獨(dú)立于 React 的組件生命周期的,需要使用者對虛擬 DOM 和 React 的渲染生命周期有一定的了解。而它的這種獨(dú)立性也就意味著開發(fā)者們需要下很深的工夫才能玩轉(zhuǎn) hook。首先讓我們以 React 的組件為例:

function Counter() {
const [count, setCount] = useState(0);

useEffect(() => {
document.title = `The current count is: ${count}`;
}, [count]);

return (
<div>
<p>The current count is: {count}</p>
<button onClick={() => setCount((x) => x + 1)}>Plus</button>
</div>
);
}

雖然這個(gè)例子并不難,但其中也涉及了幾條必不可少的規(guī)則,忽略這些規(guī)則將帶來一些不必要的麻煩。但 Solid 的響應(yīng)式圖元就不同了,它們可以讓你用起來沒有后顧之憂。你可以選擇性地調(diào)用這些圖元,就連組件里你都可以選擇不調(diào)用。用 Solid 來重寫上面的例子,就像這樣:

const [count, setCount] = createSignal(0);

createEffect(() => {
document.title = `The current count is: ${count()}`;
});

function Counter() {
return (
<div>
<p>The current count is: {count()}</p>
<button onClick={() => setCount((x) => x + 1)}>Plus</button>
</div>
);
}

把所有的響應(yīng)式圖元全部挪到了組件之外、方法之前。我們能這么做的原因完全是因?yàn)?Solid 是以響應(yīng)式圖元本身為基礎(chǔ)搭建的,而不是完全依賴組件。

響應(yīng)式還是虛擬 DOM

就像是其他大眾框架,“虛擬 DOM”這個(gè)概念是 React 框架的核心。虛擬 DOM 是指在內(nèi)存中用于描述真實(shí) DOM 的 JS 對象。因?yàn)閯?chuàng)建虛擬 DOM 的成本要遠(yuǎn)小于創(chuàng)建一個(gè)真實(shí)的 DOM,所以多次運(yùn)行組件或者對虛擬 DOM 進(jìn)行更新時(shí)的消耗也會(huì)更小。除非是對真實(shí)的 DOM 進(jìn)行修改,React 才會(huì)對虛擬 DOM 進(jìn)行更新,使其與真實(shí)的 DOM 相符。想在 React 中熟練調(diào)用 hook,就意味著開發(fā)者們要對虛擬 DOM 的生命周期有一定的了解。

而另一方面,Solid.js 更依靠一套“完善的”響應(yīng)式。舉例來說,Solid 程序中的 JSX 語句依賴于一個(gè)響應(yīng)式信號,也就是說,只有依賴于這個(gè)信號數(shù)值的 JSX 才會(huì)隨著信號的變更在方法中被重新調(diào)用。同理,所有在 creatEffect 圖元中運(yùn)行的效果也是一樣,如果這個(gè)效果依賴于一個(gè)或多個(gè)響應(yīng)式數(shù)值,那么只有在這些數(shù)值變更時(shí)才會(huì)重新渲染。這樣一來,依賴數(shù)組也不需要了,因?yàn)?Solid 已經(jīng)提前知道那些數(shù)值可以變更,以及受這些響應(yīng)式數(shù)值影響需要重新渲染的效果都有那些。

這也就是為什么前文會(huì)說 Solid 中組件“消失不見”,以及是如何在組件之外調(diào)用響應(yīng)式圖元的了。在初始的渲染之后,只有應(yīng)用中“完善”的部分會(huì)繼續(xù)存在。

來自 React 的“小玩笑”

搞清楚這兩個(gè)框架的底層工作原理大概會(huì)讓不少 React 開發(fā)者們在初次嘗試 Solid 時(shí)手忙腳亂。首先你重新學(xué)習(xí)的就是,組件并不會(huì)重新運(yùn)行。也就是說,我們在 React 中學(xué)到的大部分規(guī)矩都不再適用于 Solid.js。我們不需要用 useCallback 或者 useRef 來調(diào)用 hook,因?yàn)榻M件都是一次性的。而如果我們想要在 JavaScript 里賦值給變量,只需要這么做:

function MyForm() {
const handleSubmit = (e) => {
/* handl submit */
};

let myInput;
// use onMount or createEffect to read after connected to DOM
onMount(() => myInput.focus());

return (
<form onSubmit={handleSubmit}>
<input ref={myInput} />
</form>
);
}

第二點(diǎn)要重新熟悉的是,在銷毀 prop 函數(shù)的時(shí)候,Solid.js 的那些細(xì)粒度的響應(yīng)式也會(huì)被銷毀,雖然你可能并沒有在 prop 對象中存儲(chǔ)任何響應(yīng)式數(shù)值,但要記住,這些對象一旦被銷毀,這些響應(yīng)式也就全沒了。這也就是并不推薦下面這種代碼的原因:

function Greeting(props) {
const { greeting, name } = props;
return (
<h3>
{greeting} {name}
</h3>
);
}

但如果你寫成這個(gè)樣子,那么效果會(huì)好很多:

function Greeting(props) {
return (
<h3>
{props.greeting} {props.name}
</h3>
);
}

或者可以直接利用 Solid 的 mergeProps 或者 splitProps 函數(shù),在不影響響應(yīng)式的情況下對帶有響應(yīng)式數(shù)值的對象進(jìn)行合并或拆散。

在 React 面世的時(shí)候,它挑戰(zhàn)了當(dāng)時(shí)最優(yōu)秀的架構(gòu),并影響著我們現(xiàn)今編寫網(wǎng)頁應(yīng)用的方式。而現(xiàn)在 Solid 要做的,就是再次重現(xiàn)當(dāng)年 React 的影響。

原文鏈接:https://non-traditional.dev/an-intro-to-solidjs-for-react-developers

責(zé)任編輯:趙寧寧 來源: 前端之巔
相關(guān)推薦

2017-06-30 09:47:45

PythonJava開發(fā)者

2023-05-19 10:04:18

Vue開發(fā)者代碼

2023-06-01 07:48:03

Solidjsx??React?

2010-05-21 12:50:45

Subversion快

2010-05-27 17:27:45

Subversion快

2021-01-18 13:26:06

鴻蒙HarmonyOS應(yīng)用

2024-05-07 08:45:16

OpenAILlamaIndex大語言模型

2013-08-14 16:52:47

Android開發(fā)者

2010-06-13 09:45:35

Widget開發(fā)

2011-07-21 10:29:18

iPhone 開發(fā)

2017-02-09 15:19:14

2016-12-02 19:19:35

大數(shù)據(jù)Hadoop

2018-01-08 10:39:17

前端技術(shù)框架

2021-06-25 10:42:38

網(wǎng)絡(luò)安全安全從業(yè)者開發(fā)者

2009-09-25 10:24:40

Androind入門教OPhone

2020-02-21 08:18:58

JavaScala編程語言

2015-11-11 09:38:18

開發(fā)者自救程序員

2021-01-19 10:09:02

鴻蒙HarmonyOS應(yīng)用

2021-01-19 12:33:32

鴻蒙HarmonyOS應(yīng)用開發(fā)

2021-10-19 07:41:45

React組件前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

视频在线一区二区三区| 蜜桃视频日韩| 成人免费看视频网站| 一区二区三区免费网站| 一本一道久久a久久精品综合| 欧美激情偷拍| 国产精品中文在线| 国产调教精品| 亚洲乱码国产乱码精品精天堂| 国产在线中文字幕| 中文字幕一区二区三区四区不卡 | 日韩在线观看精品| 国产亚洲综合视频| 欧美色爱综合| 最近日韩中文字幕中文| 免费看男女www网站入口在线 | 亚洲电影一区二区| 欧美 日韩 国产 激情| 99久久免费精品| 日韩精品资源| 日本不卡一二三区黄网| av激情久久| 亚洲国产日韩欧美在线| 国产精品xxxx| 国产精品毛片一区二区在线看| 欧美日本国产在线| 精品一区免费| 欧美一进一出视频| 成人婷婷网色偷偷亚洲男人的天堂| 666欧美在线视频| 丁香六月综合| 日韩亚洲国产中文字幕| 国产精品x8x8一区二区| 久久国产精品久久精品| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 国产精品国产三级国产有无不卡 | 国产盗摄一区二区三区| 五月婷婷综合激情| 国产偷国产偷精品高清尤物| 《视频一区视频二区| 5252色成人免费视频| 99re99| 高清一级毛片视频| 中文字幕不卡在线播放| 福利片在线免费观看| 国产精品福利在线播放| 影音先锋电影在线观看| 亚洲精品视频免费在线观看| 卡通动漫精品一区二区三区| 99re视频在线| 蜜桃av.网站在线观看| 欧美狂野另类xxxxoooo| 成人看片爽爽爽| 久久综合婷婷综合| 91亚洲午夜精品久久久久久| 日韩av在线播放不卡| 欧美午夜一区二区三区| 88久久精品| 精品久久久无码人妻字幂| 国产清纯在线一区二区www| 制服丝袜专区在线| 亚洲男人天堂2023| 日韩高清在线观看一区二区| 亚洲国产激情一区二区三区| 亚洲国产视频在线| 狠狠狠综合7777久夜色撩人| 一区二区欧美亚洲| 亚洲自拍另类| 黄页网址大全在线观看| 久久91亚洲精品中文字幕奶水| 国模无码大尺度一区二区三区 | 麻豆九一精品爱看视频在线观看免费| 国产黄色一级电影| 久久精品2019中文字幕| 日韩不卡免费视频| av在线资源| 深夜福利成人| 日韩成人av网址| 国产精品99久久久| av在线女优影院| 日韩三级电影免费观看| 制服丝袜中文字幕亚洲| 日本伊人午夜精品| bt在线麻豆视频| 在线免费观看一区二区三区| 99这里只有精品| 成人图片小说| 日韩三级成人av网| 国产成人鲁色资源国产91色综| 久久久久久免费看| 在线成人高清不卡| 亚洲欧洲一区| av片在线观看免费| 久久大香伊蕉在人线观看热2| 精品福利在线看| 日本欧美在线看| av在线免费一区| 欧美乱大交xxxxx| 不卡av在线网| 性直播体位视频在线观看| 欧美一级大片视频| 99久久精品一区二区| 国产小视频在线| 亚洲欧美久久234| 精品偷拍一区二区三区在线看| 97在线超碰| 久久综合中文色婷婷| 亚洲国产古装精品网站| 国产不卡一区视频| 亚洲资源网站| 黄色在线播放网站| 欧美一区二区三区爽大粗免费| 91国产视频在线| 日韩一级片网站| 很黄很黄激情成人| 国产中文字幕在线| 青青视频免费在线| 99九九视频| 97久久精品人搡人人玩| 亚洲欧洲成人自拍| 国产一区二区毛片| 国产美女诱惑一区二区| 亚洲裸色大胆大尺寸艺术写真| 污污的网站在线看| 欧美一级黄色影院| 亚洲精品成人久久久998| 高清av免费一区中文字幕| 992tv成人免费影院| 亚洲女成人图区| 日韩免费电影网站| 亚洲成人精品一区二区| 成人黄色av电影| 韩国av一区二区三区在线观看| 一区二区三区日本久久久| 精品视频在线一区二区在线| 性直播体位视频在线观看| 人人九九精品| 成人激情电影在线看| 美女视频免费观看网站在线 | 97免费视频在线播放| 精品国产乱码久久久久久免费| 日本韩国欧美国产| 国产麻豆成人精品| 欧美日韩视频| 韩国精品福利一区二区三区 | 91在线看黄| 一二三四社区在线视频| 黄页视频在线免费观看| 韩国三级av在线免费观看| 成年人在线看片| 亚洲综合婷婷久久| 91黑丝在线| 国产精品久久久久一区二区国产| 久久精品视频一区二区| 亚洲xxxx2d动漫1| 99.玖玖.com| 国外av网站| 欧美尤物美女在线| av片在线观看永久免费| 欧洲一区av| 欧美电影在线观看网站| 欧美综合一区| 国产日韩在线视频| 奇米4444一区二区三区| 999国内精品视频在线| 91亚洲国产成人精品性色| 一级特黄录像免费播放全99| 337p粉嫩大胆噜噜噜鲁| 中文字幕在线视频观看| 99久久一区三区四区免费| 在线免费看黄网站| 久久久国产视频| 成人欧美一区二区三区黑人免费| 国产不卡av在线| 国产精品国产精品国产专区蜜臀ah| 免费成人看片网址| 嫩草影院网站在线| 久久久成人av| 国产精品网站视频| 国产1区2区3区中文字幕| 国产黄色片大全| 精品孕妇一区二区三区| 国产91精品入| 天堂在线亚洲视频| 欧洲亚洲成人| melody高清在线观看| 中文字幕 在线观看| 欧美精品网站| 国产精品家庭影院| 久久电影一区二区| 欧美日韩在线精品| 香蕉网站在线| 五月国产精品| 99久久夜色精品国产网站| 欧美四级电影网| 国产精品久久一区二区三区| 成人免费看黄网址| 中文字幕乱码在线播放| 日韩激情中文字幕| 日韩精品成人一区二区在线|