成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

我厭倦了 Redux,那就造個(gè)輪子 Rectx:第三集

eternalshallow / 1946人閱讀

摘要:呵呵,你沒想到吧,這玩意兒竟然有第三集我靠,我自己都沒想到,讓我們悄悄的回顧一下前兩集完全沒想到,竟然會(huì)有第二集我厭倦了,那就造個(gè)輪子第二集痛點(diǎn)分析第一集在這里我厭倦了,那就造個(gè)輪子算了,我都懶得寫了,自己看吧,當(dāng)然不看也無所謂,正式開始。

倉庫:215566435/rectx

前言

麻煩快去我的倉庫里面噴:

老子學(xué)不動(dòng)了,求不要更新。

呵呵,你沒想到吧,這玩意兒竟然有第三集!我靠,我自己都沒想到,讓我們悄悄的回顧一下前兩集
完全沒想到,竟然會(huì)有第二集!

我厭倦了 Redux,那就造個(gè)輪子 Rectx 第二集: immutable 痛點(diǎn)分析

第一集在這里:我厭倦了Redux,那就造個(gè)輪子:Rectx

算了,我都懶得寫了,自己看吧,當(dāng)然不看也無所謂,正式開始。

新的 Rectx 有什么不同?
a light-weight state manager with mutable api.

有人就說了,你說 light-weight來喂??那是肯定是,這個(gè)庫大小只有幾 k 。其次,新版的 Rectx 并不依賴 React.context,因此可以在任何 react 版本中使用。

當(dāng)然,短短60行核心代碼,我寫了不少的測試,覆蓋率也來到了98%。

那,為什么又更新了?

ReduxMobx都非常的棒,但對(duì)于大部分項(xiàng)目都只是CRUD的項(xiàng)目來說,這些個(gè)玩意兒都略顯太重了。

而且對(duì)于reactimmutable 哲學(xué)而言,實(shí)在是模版代碼相當(dāng)?shù)亩?,?duì)新手、高手、熟練工都不是很友好:新手覺得復(fù)雜,高手覺得煩躁,熟練工覺得不夠快。

再加上,react函數(shù)式編程以及 DOM-diff 依賴的是html tag的緣故,因此我們需要手動(dòng)優(yōu)化 React 的性能,臭名昭著的shouldComponentUpdate由此而來。

為了更好的解決上述的一些問題,我開始尋找一種方式能夠解決:
模版化很少

無需手動(dòng) shouldComponentUpdate

API 極少,學(xué)習(xí)成本低

mutable API

以下就是我的解決方案。

特點(diǎn)

rectx 有著強(qiáng)大的功能,他不僅能提供一個(gè)狀態(tài)庫,甚至能提供一個(gè)良好的類型輔助系統(tǒng),這也意味著你可以在 TypeScript中支持它!

并不依賴 react.context api,支持 15、16 版本的 react

mutable api,再也不用寫模版代碼

完整的測試,測試覆蓋率極高

typescriptd.ts 支持,非常友好的類型提示

不用寫 shouldComponentUpdate 的組件 Auto(自動(dòng))

高性能,輕量

最簡單的使用
當(dāng)然了,這個(gè)例子如果你看就懂,那我非常建議你直接去看我是如何處理,使得不需要寫shouldComponentUpdate的code sandbox 例子:

import React from "react";
import {render} from "react-dom";
import {init} from "rectx";

const {Put, Ctx} = init({foo: 1});

const App = () => (
  
{s =>
{s.foo}
}
); render(, document.getElementById("root"));

使用 renderProps 的形式,就能拿出我們想要的數(shù)據(jù).

值得注意的是,Put(s => (s.foo = s.foo + 1))在這里,我們直接修改了我們的數(shù)值,當(dāng)數(shù)據(jù)非常復(fù)雜的時(shí)候,這種操作方式尤為珍貴。

無需 shouldComponentUpdate 的組件 Auto

code sandbox例子

import { init } from "rectx";

const { Put, Ctx, Auto } = init({ foo: 1, bar: 1 });

首先我們依然是引入我們的組件,Put 用于更新,Ctx 用于獲取,那么 Auto 是一個(gè)什么鬼?

Auto 是一個(gè)選擇器,他能夠分離我們的 Store ,把每一個(gè) Store 切分成一個(gè)小粒度的塊,使得我們的代碼更加簡潔。比如我們想獲取全局狀態(tài) store 中的,bar,我們就可以:

const Bars = Auto(s => s.bar);

當(dāng)我們使用Bars的時(shí)候,我們獲取到的就是 bar 這個(gè)屬性了。當(dāng)然,Auto翻譯為自動(dòng),這是他第一個(gè)自動(dòng)的地方,第二個(gè)特點(diǎn)請看下面:

import React from "react";
import { render } from "react-dom";
import { init } from "rectx";

const { Put, Ctx, Auto } = init({ foo: 1, bar: 1 });

const Bars = Auto(s => s.bar);

const App = () => (
  
{s =>
Foo:{s.foo}
}
{Bars(bar =>
Bar:{bar}
)}
); render(, document.getElementById("root"));

首先 Auto 是一個(gè) selector,其作用是獲取全局的狀態(tài),從中選出 你關(guān)心的 屬性,當(dāng)這些屬性被選擇出來以后,只要這些屬性沒有被更新,那么他們所返回的組件 一定不會(huì) 更新。同時(shí),外部的屬性是否更新,跟他們同樣沒有任何關(guān)系。
熟悉 React 的同學(xué),一定知道這么做的珍貴之處,再也不用手動(dòng)書寫 shouldComponentUpdate 了。

類型提示
得益于 typescript,Rectx得到了良好的類型提示。

render props 中會(huì)有提示
當(dāng)我們初始化store以后,我們的store里面具體有什么值,在純 js 中并沒有智能提示,但加入了 ts 之后,一切會(huì)大不一樣

更新的時(shí)候也能有提示

最后,請不要吝嗇你的星星,倉庫:倉庫:215566435/rectx

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/97040.html

相關(guān)文章

  • 厭倦 Redux,那就造個(gè)輪子 Rectx三集

    摘要:呵呵,你沒想到吧,這玩意兒竟然有第三集我靠,我自己都沒想到,讓我們悄悄的回顧一下前兩集完全沒想到,竟然會(huì)有第二集我厭倦了,那就造個(gè)輪子第二集痛點(diǎn)分析第一集在這里我厭倦了,那就造個(gè)輪子算了,我都懶得寫了,自己看吧,當(dāng)然不看也無所謂,正式開始。 倉庫:215566435/rectx 前言 麻煩快去我的倉庫里面噴: 老子學(xué)不動(dòng)了,求不要更新。 呵呵,你沒想到吧,這玩意兒竟然有第三集!我靠,我...

    adam1q84 評(píng)論0 收藏0
  • 用Vue自己造個(gè)組件輪子,以及實(shí)踐背后帶來的思考

    摘要:用造個(gè)組件輪子吧閏土大叔如果你掌握了的組件知識(shí),相關(guān)的指令事件,花點(diǎn)時(shí)間你也可以造出這么個(gè)入門級(jí)的小輪子。接下來,拋出造輪子實(shí)踐背后帶來的一些思考。以上三部分內(nèi)容構(gòu)成了的整個(gè)執(zhí)行過程。 showImg(https://segmentfault.com/img/bV1Tnu?w=754&h=500); 前言 首先,向大家說聲抱歉。由于之前的井底之蛙,誤認(rèn)為Vue.js還遠(yuǎn)沒有覆蓋到二三線...

    icyfire 評(píng)論0 收藏0
  • 造個(gè)輪子」——cicada 設(shè)計(jì)一個(gè)配置模塊

    摘要:同時(shí)也新增了一個(gè)。將不同的配置文件用不同的對(duì)象進(jìn)行管理。由于需要支持多個(gè)配置文件,所有需要定義一個(gè)抽象類供所有的配置管理實(shí)現(xiàn)。其實(shí)就是一個(gè)結(jié)構(gòu)的緩存,用于存放所有的配置??偨Y(jié)這就是本次中的升級(jí)內(nèi)容,包含了配置支持以及代碼重構(gòu)。 showImg(https://segmentfault.com/img/remote/1460000016392132?w=2048&h=1365); 前言 ...

    fsmStudy 評(píng)論0 收藏0
  • 造個(gè)輪子,學(xué)到什么

    摘要:閱讀原文造個(gè)輪子我學(xué)到了什么聽說的最多的是不是不要重復(fù)的造輪子不要被這句話蒙騙了,這句話應(yīng)該還沒說完整,在什么情況下不要造輪子實(shí)際項(xiàng)目中由于工期和質(zhì)量原因,肯定不希望你造輪子,你造輪子花費(fèi)時(shí)間且質(zhì)量不如現(xiàn)有的輪子。 閱讀原文:造個(gè)輪子,我學(xué)到了什么 聽說的最多的是不是不要重復(fù)的造輪子?不要被這句話蒙騙了,這句話應(yīng)該還沒說完整,在什么情況下不要造輪子?實(shí)際項(xiàng)目中由于工期和質(zhì)量原因,肯定不...

    Acceml 評(píng)論0 收藏0
  • 簡潔的 React 狀態(tài)管理庫 - Stamen

    摘要:說到狀態(tài)管理,必提的肯定是與,年快過去了,它們依然是最火熱的狀態(tài)管理工具,也有一些基于的,如等,也有新的,如,這里不對(duì)各個(gè)解決方案作評(píng)價(jià)。 showImg(https://segmentfault.com/img/bVbhI3j?w=670&h=551); 說到 React 狀態(tài)管理,必提的肯定是 Redux 與 MobX,2018 年快過去了,它們依然是最火熱的狀態(tài)管理工具,也有一些...

    MyFaith 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<