3 回答

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
我已經(jīng)看到一些人引用以上答案作為“從不使用refs”的原因,我想發(fā)表自己的觀點(diǎn)(以及與我交談過(guò)的其他一些React開發(fā)人員)。
在談?wù)搶⑵溆糜诮M件實(shí)例時(shí),“不要使用引用”是正確的。意思是,您不應(yīng)使用引用作為獲取組件實(shí)例并在其上調(diào)用方法的方法。這是使用裁判的不正確方法,并且是裁判很快走到南邊的時(shí)候。
使用引用的正確(且非常有用)的方法是當(dāng)您使用引用從DOM中獲得一些價(jià)值時(shí)。例如,如果您有一個(gè)將引用附加到該輸入的輸入字段,則稍后通過(guò)該引用獲取值就可以了。如果沒(méi)有這種方式,您就需要經(jīng)過(guò)一個(gè)精心策劃的過(guò)程,以使您的輸入字段與您的本地州或流量存儲(chǔ)區(qū)保持最新-這似乎是不必要的。
2019編輯:未來(lái)的朋友你好。除了我?guī)啄昵疤岬降腲之外,借助React Hooks,引用也是跟蹤渲染之間的數(shù)據(jù)的好方法,并且不僅限于獲取DOM節(jié)點(diǎn)。

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
一般來(lái)說(shuō),refs與React的聲明式哲學(xué)背道而馳,因此您應(yīng)將它們用作最后的選擇。state / props盡可能使用。
要了解您在哪里使用refsvs state / props,讓我們看一下React遵循的一些設(shè)計(jì)原則。
每個(gè)React 文檔關(guān)于refs
避免將ref用于可以聲明式完成的任何事情。
Per React關(guān)于逃生艙口的設(shè)計(jì)原則
如果很難以聲明的方式表達(dá)一些對(duì)構(gòu)建應(yīng)用有用的模式,那么我們將為其提供命令性的API。(他們鏈接到這里的裁判)
這意味著React的團(tuán)隊(duì)建議避免refs和使用state / props以反應(yīng)性/聲明性方式可以完成的任何事情。
@Tyler McGinnis提供了一個(gè)很好的答案,并指出
正確(且非常有用)的引用使用方法是當(dāng)您使用它們從DOM中獲得一些價(jià)值時(shí)...
盡管可以做到這一點(diǎn),但您將與React的理念背道而馳。如果您在輸入中有價(jià)值,那么它肯定來(lái)自state / props。為了保持代碼的一致性和可預(yù)測(cè)性,您還應(yīng)該堅(jiān)持在state / props那里。我承認(rèn)refs有時(shí)可以為您提供更快的解決方案這一事實(shí),因此,如果您進(jìn)行概念驗(yàn)證,那么快速而骯臟的做法是可以接受的。
這給我們留下了幾個(gè)具體的使用情況進(jìn)行refs
管理焦點(diǎn),文本選擇或媒體播放。觸發(fā)命令式動(dòng)畫。與第三方DOM庫(kù)集成。
添加回答
舉報(bào)