摘要:你可能不需要人們經(jīng)常在他們不需要的時(shí)候選擇它。將與不需要指定格式代碼去更新的方法比較是太正常不過(guò),可以得出結(jié)論是復(fù)雜的。保持歷史可撤銷(xiāo)或?qū)崿F(xiàn)可預(yù)見(jiàn)的變化,而不會(huì)對(duì)編寫(xiě)代碼的方式發(fā)生重大變化。哇你應(yīng)該對(duì)有狀態(tài)的組件做這件事嗎可能不會(huì)。
你可能不需要 Redux
人們經(jīng)常在他們不需要 Redux 的時(shí)候選擇它。“如果我們的應(yīng)用沒(méi)有使用 Redux 怎么擴(kuò)展?”,緊接著,開(kāi)發(fā)人員對(duì)間接的Redux引入他們的代碼感到不滿(mǎn)。“為什么我必須引用三個(gè)文件才能得到一個(gè)簡(jiǎn)單的功能?” 為什么呢!
我能夠理解人們責(zé)怪 Redux, React, 函數(shù)式編程,不變性和其他許多事情使他們陷入困境。將 Redux 與不需要“指定格式”代碼去更新 state 的方法比較是太正常不過(guò),可以得出結(jié)論 Redux 是復(fù)雜的。在某種程度上來(lái)說(shuō)是的,但是設(shè)計(jì)如此。
Redux 提供了一個(gè)權(quán)衡,他要求你:
將應(yīng)用程序狀態(tài)描述為普通對(duì)象和數(shù)組
將系統(tǒng)中的變化描述為普通對(duì)象。
將處理更改的邏輯描述為純函數(shù)。
使用 React 或者不適用,這些都不是構(gòu)建一個(gè)應(yīng)用必要的限制。事實(shí)上這些都是很強(qiáng)的限制,在你的應(yīng)用上使用它之前,你應(yīng)該仔細(xì)考慮清楚。
你有這么做的充分理由嗎?
這些限制對(duì)我很有吸引力,因?yàn)樗鼈兛梢詭椭鷺?gòu)建應(yīng)用程序:
將 state 在本地存儲(chǔ),項(xiàng)目啟動(dòng)開(kāi)箱即用。
在服務(wù)渲染提前寫(xiě)入 state 以 HTML 格式發(fā)送到客戶(hù)端,在客戶(hù)端啟動(dòng),開(kāi)箱即用
序列化用戶(hù)操作,并將它們與狀態(tài)快照一起附加到自動(dòng)化的bug報(bào)告中,以便產(chǎn)品開(kāi)發(fā)人員可以重放它們以重現(xiàn)錯(cuò)誤。
通過(guò)傳遞 action 對(duì)象以實(shí)現(xiàn)寫(xiě)作環(huán)境,而不會(huì)對(duì)編寫(xiě)代碼的方式發(fā)生重大變化。
保持歷史可撤銷(xiāo)或?qū)崿F(xiàn)可預(yù)見(jiàn)的變化,而不會(huì)對(duì)編寫(xiě)代碼的方式發(fā)生重大變化。
在開(kāi)發(fā)過(guò)程中往來(lái)于 state 歷史之間,并在代碼更新時(shí)通過(guò) action 的歷史來(lái)決定當(dāng)前的 state
為開(kāi)發(fā)工具提供全面的檢查和控制能力,以便產(chǎn)品開(kāi)發(fā)人員能夠?yàn)樗麄兊膽?yīng)用程序定制工具。
在重用大部分業(yè)務(wù)邏輯時(shí)提供可選的 UI。
如果你正在開(kāi)發(fā)一個(gè)可擴(kuò)展的終端,一個(gè)JavaScript調(diào)試器,或者一些網(wǎng)絡(luò)應(yīng)用程序,那就值得嘗試一下,或者至少考慮一下它的一些想法(順便說(shuō)一下,它們不是新的!)
然而,如果你還在學(xué)習(xí) React,不要選擇 Redux 作為你的第一選擇。
相反,學(xué)會(huì)在 React 中思考。如果你真的需要它,或者你想嘗試一些新的東西,就回過(guò)頭使用 React。但要謹(jǐn)慎對(duì)待,就像你用任何固執(zhí)己見(jiàn)的工具一樣。
如果你覺(jué)得有壓力去做“Redux的方式”,這可能表明你或你的隊(duì)友對(duì)此過(guò)于重視。 它只是你工具箱中的一個(gè)工具,一個(gè)瘋狂的實(shí)驗(yàn)。
最后,不要忘記不用Redux就可以應(yīng)用Redux中的思想。例如,考慮具有組件內(nèi)部 state 的React組件:
import React, { Component } from "react"; class Counter extends Component { state = { value: 0 }; increment = () => { this.setState(prevState => ({ value: prevState.value + 1 })); }; decrement = () => { this.setState(prevState => ({ value: prevState.value - 1 })); }; render() { return ({this.state.value}) } }
認(rèn)真重申一遍,看樣子一切都很完美。
組件內(nèi)部 state 沒(méi)毛病
Redux提供的折衷方案是增加間接性,將“發(fā)生的事情”與“事情如何變化”分開(kāi)。
這總是一件好事嗎? 不,這是一個(gè)折衷方案。
例如,我們可以從我們的組件中提取一個(gè) reducer:
import React, { Component } from "react"; const counter = (state = { value: 0 }, action) => { switch (action.type) { case "INCREMENT": return { value: state.value + 1 }; case "DECREMENT": return { value: state.value - 1 }; default: return state; } } class Counter extends Component { state = counter(undefined, {}); dispatch(action) { this.setState(prevState => counter(prevState, action)); } increment = () => { this.dispatch({ type: "INCREMENT" }); }; decrement = () => { this.dispatch({ type: "DECREMENT" }); }; render() { return ({this.state.value}) } }
注意我們?nèi)绾卧诓贿\(yùn)行npm install的情況下使用Redux。 哇!
你應(yīng)該對(duì)有狀態(tài)的組件做這件事嗎? 可能不會(huì)。 也就是說(shuō),除非你有計(jì)劃從這種額外的間接中受益。 按照我們這個(gè)時(shí)代的說(shuō)法,制定計(jì)劃是
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/95848.html
摘要:另外,內(nèi)置的函數(shù)在經(jīng)過(guò)一系列校驗(yàn)后,觸發(fā),之后被更改,之后依次調(diào)用監(jiān)聽(tīng),完成整個(gè)狀態(tài)樹(shù)的更新。總而言之,遵守這套規(guī)范并不是強(qiáng)制性的,但是項(xiàng)目一旦稍微復(fù)雜一些,這樣做的好處就可以充分彰顯出來(lái)。 這一篇是接上一篇react進(jìn)階漫談的第二篇,這一篇主要分析redux的思想和應(yīng)用,同樣參考了網(wǎng)絡(luò)上的大量資料,但代碼同樣都是自己嘗試實(shí)踐所得,在這里分享出來(lái),僅供一起學(xué)習(xí)(上一篇地址:個(gè)人博客/s...
摘要:另外,內(nèi)置的函數(shù)在經(jīng)過(guò)一系列校驗(yàn)后,觸發(fā),之后被更改,之后依次調(diào)用監(jiān)聽(tīng),完成整個(gè)狀態(tài)樹(shù)的更新。總而言之,遵守這套規(guī)范并不是強(qiáng)制性的,但是項(xiàng)目一旦稍微復(fù)雜一些,這樣做的好處就可以充分彰顯出來(lái)。 這一篇是接上一篇react進(jìn)階漫談的第二篇,這一篇主要分析redux的思想和應(yīng)用,同樣參考了網(wǎng)絡(luò)上的大量資料,但代碼同樣都是自己嘗試實(shí)踐所得,在這里分享出來(lái),僅供一起學(xué)習(xí)(上一篇地址:個(gè)人博客/s...
摘要:在如今的前端框架界,三分天下的時(shí)代已經(jīng)到來(lái),而曾經(jīng)一統(tǒng)天下的局面已一去不復(fù)返。三分天下,前端雖亂,但美其名曰繁榮。那些小事俗話說(shuō)千里之堤毀于蟻穴,在開(kāi)發(fā)中我們不能忙于進(jìn)度而忽視了細(xì)節(jié)。 前言 說(shuō)起React,那也是近一年多時(shí)間火起來(lái)的前端框架,其在Facebook的影響力和大力推廣下,已然成為目前前端界的中流砥柱。在如今的前端框架界,React、Vue、Angular三分天下的時(shí)代已經(jīng)...
摘要:我現(xiàn)在寫(xiě)的這些是為了解決和這兩個(gè)狀態(tài)管理庫(kù)之間的困惑。這甚至是危險(xiǎn)的,因?yàn)檫@部分人將無(wú)法體驗(yàn)和這些庫(kù)所要解決的問(wèn)題。這肯定是要第一時(shí)間解決的問(wèn)題。函數(shù)式編程是不斷上升的范式,但對(duì)于大部分開(kāi)發(fā)者來(lái)說(shuō)是新奇的。規(guī)模持續(xù)增長(zhǎng)的應(yīng) 原文地址:Redux or MobX: An attempt to dissolve the Confusion 原文作者:rwieruch 我在去年大量的使用...
摘要:實(shí)例講解示例代碼地址在這里你可以通過(guò)命令到本地,也可以直接下載。之后便可以通過(guò)執(zhí)行示例代碼。下面結(jié)合實(shí)例中的內(nèi)容理解上述概念。更改應(yīng)用的狀態(tài)通過(guò)方法將發(fā)送到函數(shù)中,進(jìn)行狀態(tài)的更新。分別用來(lái)處理頁(yè)面和頁(yè)面狀態(tài)的更新。 實(shí)例講解Redux 示例代碼地址在這里 ,你可以通過(guò)git clone命令clone到本地,也可以直接下載。 然后通過(guò)執(zhí)行npm install 安裝所依賴(lài)的模塊 。之后便...
閱讀 3282·2021-11-18 10:02
閱讀 3447·2021-10-11 10:58
閱讀 3379·2021-09-24 09:47
閱讀 1125·2021-09-22 15:21
閱讀 3944·2021-09-10 11:10
閱讀 3281·2021-09-03 10:28
閱讀 1751·2019-08-30 15:45
閱讀 2144·2019-08-30 14:22