摘要:引入,有效解決事件分發(fā)時(shí),事件類(lèi)型的一致性以及清晰邏輯性。其實(shí),細(xì)心思考,不難發(fā)現(xiàn),隨著項(xiàng)目增大。目錄將會(huì)隨著數(shù)據(jù)處理事件迅速膨脹。大家一直維護(hù)著這個(gè)事件命名機(jī)制,身心疲憊有木有。其實(shí),隨著項(xiàng)目增大,獨(dú)立出來(lái)的也會(huì)導(dǎo)致非常麻煩的維護(hù)問(wèn)題。
作者:Jogis
原文鏈接:https://github.com/yesvods/Blog/issues/4
轉(zhuǎn)載請(qǐng)注明原文鏈接以及作者信息
事情經(jīng)過(guò)是這樣的,某個(gè)陽(yáng)光明媚的晚上,跟大多數(shù)人一樣,在MacBook前靜靜地寫(xiě)著redux/flux“優(yōu)美”的詩(shī)句。劇情急轉(zhuǎn)直下:
└── constants ├── comA.js ├── comB.js ├── comC.js ├── comD.js ├── comE.js └── index.js
index.js看起來(lái)是這樣的:
import * from "./a"; import * from "./b"; ...
好像沒(méi)什么不對(duì)勁,然后看了一下a.js和b.js..
//a.js export const OPEN_SIDEBAR = "OPEN_SIDEBAR"; export const CLOSE_SIDEBAR = "CLOSE_SIDEBAR"; export const HIDE_ITEM = "HIDE_ITEM"; //b.js export const TOGGLE_LIST = "TOGGLE_LIST"; export const CHANGE_WIDTH = "CHANGE_WIDTH"; export const HIDE_ITEM = "HIDE_ITEM";
。。
。。。
。。。。
喵的,不同組件的constant又寫(xiě)重復(fù)了。于是開(kāi)始漫長(zhǎng)的改constant之旅:
名字改成 COMB_HIDE_ITEM
reducers/comB.js改幾個(gè)store/reducer
actions/comB.js改幾個(gè)action
慢著....
好像comC,comD,comE都有這個(gè)constant
咳咳,膝蓋中箭的有木有,站出來(lái)!其實(shí)constant這個(gè)常量在react界最先被flux框架采用,再后來(lái)著名的redux(star數(shù)已經(jīng)超過(guò)flux),也采用同樣方式定義action與reducer之間的事件分發(fā)機(jī)制。引入constant,有效解決事件分發(fā)時(shí),事件類(lèi)型的一致性以及清晰邏輯性。
constant的悲慘經(jīng)歷其實(shí)一直以來(lái),業(yè)界津津樂(lè)道的是react的vm,flux/redux的狀態(tài)管理機(jī)制,webpack開(kāi)發(fā)技巧以及插件使用,react-router入門(mén) etc.
constant如此重要的事件結(jié)構(gòu)機(jī)制因?yàn)榭蓪⑿蕴停淮蠹液雎浴F鋵?shí),細(xì)心思考,不難發(fā)現(xiàn),隨著項(xiàng)目增大。constants目錄將會(huì)隨著數(shù)據(jù)處理事件迅速膨脹。大家一直維護(hù)著這個(gè)事件命名機(jī)制,身心疲憊有木有。
constant發(fā)展 constant由一開(kāi)始的flux風(fēng)格,配合facebook插件庫(kù)export KeyMirror({ ADD_TODO: null, COMPLETE_TODO: null, SET_VISIBILITY_FILTER: null })再到小項(xiàng)目維護(hù)的constant,非常容易導(dǎo)致重復(fù)
export const ADD_TODO = "ADD_TODO" export const COMPLETE_TODO = "COMPLETE_TODO" export const SET_VISIBILITY_FILTER = "SET_VISIBILITY_FILTER"
引用redux文檔的原話(huà):
Types should typically be defined as string constants. Once your app is large enough, you may want to move them into a separate module.
看到剛剛LZ的經(jīng)歷,大家可以發(fā)現(xiàn)。其實(shí),constant隨著項(xiàng)目增大,獨(dú)立出來(lái)的constants也會(huì)導(dǎo)致非常麻煩的維護(hù)問(wèn)題。
constant的進(jìn)化類(lèi)似constant-mirror、flux-constants的庫(kù)都耐不住寂寞了,站出來(lái)聲張正義。
但是,這些庫(kù)其中一個(gè)致命共同點(diǎn):
我們都依舊需要維護(hù)一套constants
不同組件使用的constants依舊有可能會(huì)因?yàn)橹貜?fù)導(dǎo)致不可預(yù)知的問(wèn)題
react-constant 簡(jiǎn)介就一句話(huà):
Fuck Off constants.js
我們?cè)僖膊恍枰ゾS護(hù)任何的與constant有關(guān)的文件,也不需要到處去找constants/comA.js、reducer/comA.js、action/comA.js一個(gè)個(gè)去改命名。
把所有constant相關(guān)文件去掉,react-constant為您打理得井井有條
自定義命名空間的constant,comA的HIDE_ITEM和comB的HIDE_ITEM可不一樣,自家用自家的,互不侵犯。
自動(dòng)生成偽uuid格式的constant,不用再為生成格式打個(gè)null
2kb大小(minified),任何地方的貼心小助手
單元測(cè)試,100% coverage
使用過(guò)程相當(dāng)簡(jiǎn)單,沒(méi)有任何多余的代碼 Usage Installnpm install react-constant --saveImport & Instance Webpack/Browserify
//ES5 version var Constant = require("react-constant").Constant; var constants = Constant("mynamespace"); //ES6 version import { Constant } from "react-constant"; let constants = Constant("mynamespace");browser Just do it
reducer.js
function reducer(state, action){ switch(action.type){ case constants.of("ON"): //TODO break; case constants.of("OFF"): //TODO break; default: return state; } }
action.js
function toggleLight(flag){ return { type: constants.ON, flag: flag } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/78188.html
摘要:引入,有效解決事件分發(fā)時(shí),事件類(lèi)型的一致性以及清晰邏輯性。其實(shí),細(xì)心思考,不難發(fā)現(xiàn),隨著項(xiàng)目增大。目錄將會(huì)隨著數(shù)據(jù)處理事件迅速膨脹。大家一直維護(hù)著這個(gè)事件命名機(jī)制,身心疲憊有木有。其實(shí),隨著項(xiàng)目增大,獨(dú)立出來(lái)的也會(huì)導(dǎo)致非常麻煩的維護(hù)問(wèn)題。 作者:Jogis原文鏈接:https://github.com/yesvods/Blog/issues/4轉(zhuǎn)載請(qǐng)注明原文鏈接以及作者信息 前言 事情...
摘要:,之前在介紹的時(shí)候圖表君還是留了問(wèn)題。下邊說(shuō)幾句非技術(shù)的話(huà)題,技術(shù)的道路做久了,都會(huì)考慮到技術(shù)路線(xiàn)的問(wèn)題,作為一個(gè)年輕人圖表君并沒(méi)有太多的經(jīng)驗(yàn),但是上周看到了池建強(qiáng)老師的一篇文章,說(shuō)的挺好,在這里分享給大家。 大家周末好,天氣這是越來(lái)越冷了,冬季到來(lái)了。西安冬日的傳統(tǒng)霧霾又上演了,不過(guò)最近又限行了,希望能有點(diǎn)用處吧。好了今天不說(shuō)什么新的東西,把之前的坑給填一填吧。 上篇文章的最后給大家...
摘要:圖表君聊開(kāi)篇今天是圖表君聊的第一篇,為什么會(huì)有這個(gè)系列呢容器技術(shù)出現(xiàn)已經(jīng)有一段時(shí)間了,之前零零星星的也看過(guò)一些文章,圖表君的項(xiàng)目上也在使用。至于,圖表君沒(méi)試過(guò),官網(wǎng)有的教程,大家可以參考。上的官網(wǎng),安裝,然后跟著圖表君一起學(xué)習(xí)吧。 圖表君聊Docker-開(kāi)篇 今天是圖表君聊Docker的第一篇,為什么會(huì)有這個(gè)系列呢?容器技術(shù)Docker出現(xiàn)已經(jīng)有一段時(shí)間了,之前零零星星的也看過(guò)一些文章...
摘要:今日勵(lì)志語(yǔ)錄有志者自有千計(jì)萬(wàn)計(jì),無(wú)志者只感千難萬(wàn)難。三動(dòng)畫(huà)技術(shù)越來(lái)越不陌生,使用門(mén)檻也漸漸降低,而且動(dòng)畫(huà)還可以使用控制。掃一掃查看效果打開(kāi)微掃一掃關(guān)注早讀君,每天早晨為你推送前端知識(shí),度過(guò)擠地鐵坐公交的時(shí)光 今日勵(lì)志語(yǔ)錄有志者自有千計(jì)萬(wàn)計(jì),無(wú)志者只感千難萬(wàn)難。 文章原出處:騰訊ISUX 開(kāi)始閱讀之前你可以先掃一掃體驗(yàn)demoshowImg(https://segmentfault.co...
閱讀 1386·2021-11-04 16:11
閱讀 3046·2021-10-12 10:11
閱讀 2980·2021-09-29 09:47
閱讀 1618·2021-09-22 15:40
閱讀 1016·2019-08-29 15:43
閱讀 2807·2019-08-29 13:50
閱讀 1582·2019-08-29 13:28
閱讀 2693·2019-08-29 12:54