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

Solid 作者從 React 中學到最重要的是什么?

開發 前端
本文存在的意義,是闡述一個觀點 —— 這些規范之所以存在,是為了共同實現「局部思考」的理念。而這一理念,才是前端框架可維護性、可讀性的來源。

大家好,我卡頌。

前端界有句玩笑話 —— 「React 一點都不 react,Solid 才應該叫 React」。

作為一款「借鑒了很多 React 特性」的前端框架,截止目前,Solid已經有 29.6kstar。顯然,他已經得到了社區的認可。

前段時間,Solid的作者「Ryan Carniato」在博文Thinking Locally with Signals[1]中提到 —— SolidReact中學到的最重要的東西,不是JSX虛擬DOM,而是一個被稱為「局部思考」(Locality of Thinking)的概念。

本文就來聊聊這個對前端開發影響深遠的理念。

局部思考是什么?

當我們新入職一家公司,在熟悉項目代碼階段,領導通常會分配給我們一些小需求,幫助我們快速熟悉項目代碼。

這個過程是如此自然,以至于我們都忽視了一個重要問題 —— 為什么在一個龐大的項目代碼庫中,即使不熟悉代碼,也能輕松修改一些小功能?

答案是 —— 「局部思考」理念在發揮作用。

「局部思考」是指你可以不看其他代碼,只通過一個組件的代碼就能理解它的行為。這種思考方式對代碼的可維護性和可讀性有著重大影響。

首先,在大型項目中,代碼的「可維護性」至關重要。如果每次修改都需要理解整個代碼庫,那么這個項目可能會很快變得難以維護。

其次,從「可讀性」的角度來看,如果代碼的可讀性好,那么新的開發人員可以更快地理解和開始他們的工作。

通過「局部思考」,可以使代碼更易讀、可維護性更高。試想,這不正是「使用框架開發」相比于「使用 jQuery 開發」的優勢么?至于框架的其他特性(比如虛擬DOM細粒度更新Hooks...)都是在「局部思考」的基礎上發展出來的。

可以說,「局部思考」是「框架開發」這種工作模式的基石。

如何實現局部思考

假設項目中有如下代碼,你能保證結果是true么:

const obj = {}
someFunction(obj)

// 結果是 true 么?
console.log(obj.value === undefined)

要想知道結果,必須看someFunction函數的內部實現。如果項目中大量充斥了上面這樣的代碼,對可讀性、可維護性簡直是災難。

「局部思考」理念的提出就是為了解決上述問題。要實現「局部思考」,有四個重要因素:

  • 單向數據流
  • 讀寫分離
  • 顯式突變
  1. 組件隔離

單向數據流

數據應該只在一個方向上流動。這樣可以保證數據的來源和使用是一致的,使得代碼行為更可預測,減小了出現bug的可能性。

考慮如下Solid代碼,數據只從父組件流向子組件。子組件只讀取數據,而不能改變它:

// 父組件內
const [count, setCount] = createSignal(0);
<ChildComponent count={count()} />

// 子組件內
const ChildComponent = ({ count }) => {
  // count是只讀的
  return <div>{count}</div>
}

讀寫分離

讀取數據和修改數據應該是兩個獨立的操作。這樣可以降低代碼的復雜度,使得閱讀和理解代碼更簡單。

考慮如下Solid代碼,SomeComponent通過title()讀取值,通過setTitle修改值。這種分離使得我們可以更好地理解狀態何時變化。

// [讀, 寫]
const [title, setTitle] = createSignal("title");

// `SomeComponent`不能改變`title`
<SomeComponent title={title()} />

// 現在`SomeComponent`可以更新title
<SomeComponent title={title()} updateTitle={setTitle} />

在Svelte中,狀態(或者叫signal)只能「按值傳遞」,所以下面SomeComponent即使接收title作為props,也無法直接修改他。

要修改他,需要執行updateTitle方法(方法內部閉包中的title是signal,可以響應更新)。這也是一種「讀寫分離」的實現。

let title = $state("title")

// `SomeComponent`不能改變`title`
<SomeComponent title={title} />

// 現在`SomeComponent`可以更新title
<SomeComponent title={title} updateTitle={(v) => title = v} />

顯式突變

所有的數據變化應該是顯式的,而不是在背后默默發生。這樣更容易跟蹤數據的變化。考慮如下Solid代碼:

// 定義狀態
const [count, setCount] = createSignal(0);

// 顯式改變狀態
setCount(count() + 1);

是不是一下就想到了React中的useState呢?沒錯,其實不止是useState,在ClassComponent的this.setState也是遵循同樣的原則。

組件隔離

每個組件應該只關心自己的狀態和邏輯,而不是其他組件的。這樣可以保證組件之間的獨立性,降低耦合度,使得代碼更易于維護。

總結

如果你覺得以上的介紹一點技術含量都沒有,那是再自然不過的事。因為這些原則都是React最基本的使用規范。

本文存在的意義,是闡述一個觀點 —— 這些規范之所以存在,是為了共同實現「局部思考」的理念。而這一理念,才是前端框架可維護性、可讀性的來源。

按照這個思路去思考,就能明白很多React特性的用意,比如:

  • 為什么函數組件替代了類組件。
  • 為什么會出現useEffect這個Hook。
  • 為什么ref不能跨函數組件傳遞。

這些特性的背后,都體現了「局部思考」的理念。

參考資料

[1]Thinking Locally with Signals:https://dev.to/this-is-learning/thinking-locally-with-signals-3b7h。

責任編輯:姜華 來源: 魔術師卡頌
相關推薦

2021-03-09 09:55:02

Vuejs前端代碼

2013-08-19 12:46:27

2021-10-11 09:55:58

Facebook業務中斷網絡安全

2021-09-08 17:36:58

程序員技能開發者

2023-11-24 13:24:14

CIOOptus

2020-12-31 10:47:03

開發Vuejs技術

2016-01-18 10:06:05

編程

2020-07-07 10:38:11

首席信息官IT領導者經驗教訓

2020-07-07 10:40:45

CIO首席信息官IT

2024-06-13 15:59:30

2022-12-12 11:08:07

數字化轉型企業

2020-01-08 14:32:06

物聯網黑客網絡安全

2024-04-07 14:11:42

ITGenAI

2020-05-19 13:46:33

勒索軟件信息安全攻擊

2025-01-08 09:33:53

2009-05-14 10:40:11

網絡工程師能力

2018-08-14 05:34:19

2022-03-27 09:06:04

React類型定義前端

2015-05-06 14:36:56

CIO云計算風險云遷移

2010-10-12 11:06:07

招聘
點贊
收藏

51CTO技術棧公眾號

欧美日韩三级一区二区| 欧美成人免费播放| 久草在线中文888| 亚洲欧美综合在线精品| 三上悠亚在线观看二区| 色国产综合视频| 最爽无遮挡行房视频在线| 日韩女优电影在线观看| 成人做爰视频www| 久久久伊人日本| 一区二区免费不卡在线| 日本一区二区三区四区高清视频| 精品在线一区二区| 青青草精品视频在线观看| 午夜精品福利在线| 日本孕妇大胆孕交无码| 久久久久国产精品www| 欧美 日韩 国产精品免费观看| 亚洲精品在线免费看| 国产精品天干天干在观线| 国内三级在线观看| 亚洲色图17p| 国产一区毛片| 亚洲精品高清国产一线久久| 国产精品日韩成人| 黄色网址在线免费观看| 久久九九国产精品怡红院| 欧美国产一级| 操bbb操bbb| 亚洲成人av电影| 九色porny丨入口在线| 欧美亚洲国产视频小说| 久久中文精品| 羞羞免费视频| 日韩久久精品一区| 九色丨蝌蚪丨成人| 午夜精品短视频| 亚洲欧美日韩一区| 忘忧草在线日韩www影院| 国产精品视频自在线| 久久国产精品色| 桃花色综合影院| 久久九九全国免费精品观看| 亚洲国产一区二区精品专区| 国产wwwxx| 亚洲精品狠狠操| 亚洲欧美偷拍自拍| 国产一区亚洲二区三区| 日韩欧美久久一区| 日韩伦理一区| 青青草国产精品视频| 欧美精品自拍偷拍动漫精品| 亚洲永久精品唐人导航网址| 800av在线免费观看| 欧美精品在线观看播放| 亚洲电影一级片| 免费看日本毛片| 日韩一区二区三区电影| 国产一卡不卡| 黄色高清无遮挡| 亚洲精品动漫100p| 精品91在线| jk破处视频在线| 欧美福利视频网站| 国产精品乡下勾搭老头1| 91福利精品第一导航| 亚洲午夜久久久久中文字幕久| 精品久久久久久中文字幕一区奶水 | 亚洲人人精品| 国产一伦一伦一伦| 日韩大片免费观看视频播放| 欧美精品一卡| 浪潮av在线| 久久夜色精品国产欧美乱| 蜜臀av一区二区在线免费观看 | 少妇人妻在线视频| 亚洲精品久久久一区二区三区| 亚洲第一黄网| 理论片在线观看理伦片| 97精品国产97久久久久久免费 | 欧美一区二区| 日本在线中文电影| 97成人超碰免| 国产亚洲欧洲一区高清在线观看| 台湾佬中文娱乐久久久| 伊人婷婷久久| 亚洲护士老师的毛茸茸最新章节| 国产亚洲精品bv在线观看| 九色在线免费| 成人黄视频免费| 91官网在线免费观看| 中文在线播放一区二区| 欧美色18zzzzxxxxx| 91免费版网站在线观看| 日本高清不卡在线观看| 极品日韩av| а√中文在线8| 手机成人在线| 精品亚洲aⅴ在线观看| 久久99精品久久久久婷婷| 欧洲在线视频| 亚洲色图自拍| 亚洲热线99精品视频| 成人免费观看男女羞羞视频| 性欧美video另类hd尤物| 国产91在线免费| 欧美老女人xx| 中文字幕中文字幕在线一区| 97人人澡人人爽91综合色| 自拍偷拍精选| 国产日韩综合一区二区性色av| 欧美色图在线视频| 狠狠入ady亚洲精品| 午夜羞羞小视频在线观看| 亚洲天堂电影网| 亚洲性69xxxbbb| 波多野洁衣一区| 欧美人体视频| 欧洲视频在线免费观看| 久久福利电影| 亚洲美女在线视频| 久久精品网站免费观看| 欧美一区二区三区激情视频| aiai在线| 女人被男人躁得好爽免费视频 | 久久久综合av| 亚洲影院在线观看| 欧美日韩亚洲一区三区| 神马午夜伦理不卡| 少妇人妻无码专区视频| 欧美一区二区三区……| 欧美在线观看视频在线| 国产在线精品一区在线观看麻豆| 日韩高清一区| 中文字幕毛片| 日本在线播放一区| 久99久在线视频| 色呦呦一区二区三区| 久久精品国产亚洲一区二区三区| 99精品国产九九国产精品| 一级特黄视频| 亚洲乱码国产乱码精品天美传媒| 久久久久五月天| 欧美亚洲国产怡红院影院| 国产电影一区二区三区| 成人av二区| 中文字幕在线中文字幕在线中三区| 久久久久久久久久久久91| 成人动漫视频在线观看完整版| 亚洲精品电影在线| 成人欧美一区二区三区小说| 99国产精品视频免费观看一公开| 日韩电影精品| 午夜免费福利在线观看| 韩国日本美国免费毛片| 久久久一本精品99久久精品66| 欧美成人精品h版在线观看| 欧美日韩色一区| 国产欧美精品国产国产专区| 久久动漫亚洲| 精品视频免费| 国产精品4hu.www| 中文字幕在线播放| 97在线资源在| 亚洲成人自拍视频| 国产综合视频在线观看| 中文字幕日韩专区| 欧美性色欧美a在线播放| 国产欧美日韩视频在线观看| 人人爽香蕉精品| 亚洲国产精品91| xxxxxhd亚洲人hd| 国模精品视频| 搞黄视频在线观看| av网站免费| 国产素人在线观看| 三区精品视频观看| 91免费看国产| 欧美激情中文网| 亚洲人成欧美中文字幕| 欧美三日本三级三级在线播放| 欧美国产禁国产网站cc| 国产一区不卡在线| 美女国产一区| 欧美一区成人| 精品国产91乱码一区二区三区四区| 国产精品久久久久久久久免费高清| 欧美a在线看| 色鬼7777久久| 2019一级黄色毛片免费看网 | aa日韩免费精品视频一| 欧美激情欧美激情在线五月| 日韩成人av网| 欧美另类高清zo欧美| 偷窥少妇高潮呻吟av久久免费| 国产三级精品视频| 成人一区二区三区视频| 久久国产精品免费| 噜噜噜在线观看免费视频日韩 | 国产精品一区二区在线播放|