當(dāng)我們使用npm create-react-app my-app
創(chuàng)建一個react項目的時候,在項目根目錄index.js中有如下所示的一段代碼:
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
React.StrictMode
組件是什么?
StrictMode是一個用來檢查項目中潛在問題的工具。與Fragment一樣。它不會渲染任何可見的UI浩销。為其后代元素觸發(fā)額外的檢查和警告。
嚴格模式檢查盡在開發(fā)模式下運行,不會影響生產(chǎn)構(gòu)建胞得。
- StrictMode 目前有助于
識別不安全的生命周期
關(guān)于使用過時字符串 ref API 的警告
關(guān)于使用廢棄 findDOMNode 方法的警告
檢測意外的副作用
檢測過時的context API
生命周期警告
過時的組件生命周期往往會帶來不安全的編碼實踐,具體函數(shù)如下
1屹电、componentWillMount
2阶剑、componentWillReceiveProps
3、componentWillUpdateref API 的警告
React 提供了兩種方法管理 refs 的方式:已過時的字符串 ref API 的形式及回調(diào)函數(shù) API 的形式危号。盡管字符串 ref API 在兩者中使用更方便牧愁,但是它有一些缺點,因此官方推薦采用回調(diào)的方式葱色。檢測的副作用
渲染階段的生命周期包括以下class組件方法
1递宅、constructor
2、componentWillMount (or UNSAFE_componentWillMount)
3苍狰、componentWillReceiveProps (or UNSAFE_componentWillReceiveProps)
4办龄、componentWillUpdate (or UNSAFE_componentWillUpdate)
5、getDerivedStateFromProps
6淋昭、shouldComponentUpdate
7俐填、render
8、setState 更新函數(shù)(第一個參數(shù))
因為上述方法可能會被多次調(diào)用翔忽,所以不要在它們內(nèi)部編寫副作用相關(guān)的代碼英融,這點非常重要。忽略此規(guī)則可能會導(dǎo)致各種問題的產(chǎn)生歇式,包括內(nèi)存泄漏和或出現(xiàn)無效的應(yīng)用程序狀態(tài)驶悟。不幸的是,這些問題很難被發(fā)現(xiàn)材失,因為它們通常具有非確定性痕鳍。
嚴格模式不能自動檢測到你的副作用,但它可以幫助你發(fā)現(xiàn)它們,使它們更具確定性笼呆。通過故意重復(fù)調(diào)用以下函數(shù)來實現(xiàn)的該操作:
1熊响、class 組件的 constructor,render 以及 shouldComponentUpdate 方法
2诗赌、class 組件的生命周期方法 getDerivedStateFromProps
3汗茄、函數(shù)組件體
4、狀態(tài)更新函數(shù) (即 setState 的第一個參數(shù))
5铭若、函數(shù)組件通過使用 useState洪碳,useMemo 或者 useReducer