React 預設 props 為什麼不能用 es6 預設值?

時間 2021-05-05 16:17:23

1樓:朱仕傑

可以去看看左耳朵浩子講的引用語言方法呼叫彙編的實際原理,函式來說每個引數都被賦值了乙個臨時變數,可能作者想保持純函式的風格就沒有進行最後complier的支援。

2樓:Memoirs

不建議使用defaultProps,因為React可能會使用jsx-runtime來替代React.createElement,而jsx-runtime貌似不支援defaultProps(重新看了一遍,應該是FunctionComponent不支援,ClassComponent還是支援的)

3樓:SToneX

TLDR

短期來看這兩種寫法差距不大,專案裡統一風格就挺好的了。但是我目前更傾向用引數預設值。

首先是目前官方關於 createElement 和 jsx 的 RFC https://

中有這樣一條

」Deprecate defaultProps on function components.「

並且說了原因:

另外,如果專案使用了 TypeScript,預設值的寫法在型別上更簡潔些(.defaultProps 也能實現),倒是 defaultProps 和 React.FC 一起用時會帶來更多的問題。

4樓:張立理

可以用ES預設值,並且推薦用預設值(在處理TS型別的時候會爽快很多)但是用ES預設值有乙個小問題需要注意一下,對於非基礎型別的屬性:

const

Foo=

()=>

/>;};

const

Foo=

()=>

/>;};

Foo.

defaultProps=;

前者與後者相比,當items為undefined時,ES預設值每一次都是乙個「引用不相同的空陣列」,因此會導致Bar收到變化的dataSource屬性發生不必要的更新,而defaultProps沒有這問題

因此使用ES預設值時,如果是非基礎屬性,建議放乙個常量在外面:

const

EMPTY_ITEMS=;

const

Foo=

()=>

/>;};

還有乙個點是,如果你宣告了propTypes,且其中有屬性宣告不是isRequired的,又沒有對應的defaultProps,eslint的react/default-props-match-prop-types這條規則會報錯,我的選擇是直接關了這條規則

你為什麼喜歡 React?

小星ZlpwGreat react 寫js 多一點,剛開始寫vue 沒搞懂,後面寫 react 搞懂了,後面就一直寫 react 了 沒什麼喜不喜歡的,會了就和吃飯一樣,為什麼你喜歡用筷子吃飯這種 多試試吧 Nero 主要的setState,讓UI f data 這樣的函式式模式體現得淋漓盡致。資料...

React 為什麼要引入 class component?

因為React發布的時候前端還在刀耕火種,接受不了丘奇哥哥的理念。而且那個時候正好也是前端流行物件導向風格的時候,嘖嘖嘖。關鍵是你物件導向的話,要做戲做全套啊,光放個class在那裡有啥用,那麼多建立型模式都用上啊,依賴注入也用上啊?所以後來React乾脆函式式一擼到底,hooks應該是早就有了現在...

為什麼 React 原始碼不用 TypeScript 來寫?

楊健 語言上來講flow不比typescript差太多吧,sound方面明顯強於ts,最差的就是生態了,但是我乙個內部實現幾乎不依賴啥第三方庫,生態影響微乎其微 賀師俊 先看時間線。TypeScript是2012年10月發布的,2014年10月發的1.1 Flow是2014年11月發布的。React...