componentWillReceiveProps和其他生命週期方法似乎具有欺騙性的誘惑,爲沒有經驗的React編碼器的代碼帶來不必要的複雜性和噪音。他們爲什麼存在?他們最典型的用例是什麼?在不確定的時刻,我如何知道答案是否存在於生命週期方法中?什麼是React生命週期方法的典型用例,例如componentWillReceiveProps
回答
我一直在使用幾個月的反應,而我的大部分工作是從頭開始創建一個大型應用程序。因此,一開始就提出了同樣的問題。
下面的信息是基於學習,同時發展和通過多個文檔在那裏得到它的權利。
至於問這裏的問題是在生命週期方法夫婦的用途的情況下反應
componentWillMount()
- 這是在服務器端調用一次,如果服務器端渲染存在,並曾經是客戶端。
- 我個人使用它只是做它沒有對成分直接作用API調用,例如獲取OAuth憑證
componentDidMount()
- 該功能主要用於調用API的(here是爲什麼要在componentDidMount中調用它,而不是在componentWillMount中)
- 組件
state
初始化基於父母通過的道具。
componentWillReceiveProps(nextProps,nextState)
- 這個函數被調用每一個道具都收到除了第一渲染
- 最常見的用法我曾經遇到過的時間來更新我的電流分量的狀態這我無法在componentWillUpdate中做到這一點。
shouldComponentUpdate(nextProps, nextState)
- 之前,當接收到新的道具或狀態呈現發生這種方法被調用。如果不需要重新渲染,我們可以返回false。
- 我認爲這是一個性能優化工具。在父組件的頻繁的重新渲染的情況下,應使用此方法,以避免不必要的更新,以電流分量
componentWillUpdate(nextProps,nextState)
- 這個函數被調用每一個組件被更新時,它不在部件安裝時調用
- 在此處執行任何數據處理。例如,當一個API獲取收益數據,原始數據模擬成道具要傳遞給孩子
this.setState()
不允許在此功能,它是在componentWillReceiveProps做或componentDidUpdate
componentDidUpdate(prevProps,prevState)
- 後調用權的變化都推到DOM
- 我已經用它的時候所需要的數據是不是在第一渲染(等待API調用來通過)和DOM要求是陳基於數據GED收到
- 例如,根據收到的年齡顯示給用戶,如果他有資格申請的事件
componentWillUnmount()
- 作爲官方文檔中提到的任何事件在組件中使用監聽器或定時器這裏要清潔
在不確定的時刻,我將如何知道答案在於生命週期方法的 ?
我建議什麼比喻
變化是組件本身
- 例觸發,啓用字段編輯在編輯按鈕
- 在同一個函數的點擊組件更改狀態不涉及生命週期功能
- 變更被觸發組件
- 實施例之外,API調用完成時,需要顯示所接收的數據
- 爲勝生命週期方法。
這裏有一些更多的場景 -
處於狀態/道具的變化需要修改的DOM?
- 例如,如果當前的電子郵件已存在,給輸入類一個錯誤類。
componentDidUpdate
處於狀態/道具的變化,需要對數據進行更新?
- 例如,在api調用後接收格式數據並將格式化數據傳遞給子級的父容器。
componentWillUpdate
道具被傳遞到一個子被改變,孩子需要更新
- 實施例,
shouldComponentUpdate
添加一個事件監聽器
- 示例,根據窗口大小添加監聽器來監視DOM。
componentDidMount
- 'componentWillMount',摧毀聽者
調用API
- 'componentDidMount'
來源 -
個一些典型使用案例中最常用的生命週期方法:
componentWillMount:初始渲染之前調用。對於進行AJAX調用很有用。例如,如果您需要獲取用戶信息以填充視圖,那麼這是一個很好的選擇。如果您確實有AJAX調用,那麼在AJAX調用完成之前呈現不確定的加載欄將會很好。我還使用componentWillMount調用setInterval並在頁面呈現前禁用Chrome的拖放功能。
componentDidMount:在組件呈現後立即調用。如果您需要訪問DOM元素,這很有用。例如,我用它來禁用複製並粘貼到密碼輸入字段中。非常適合調試,如果您需要知道組件的狀態。
componentWillReceiveProps:組件接收新道具時調用。用於在不重新渲染的情況下使用新道具設置狀態。
componentWillReceiveProps是更新lifce週期方法的一部分和渲染開始之前被稱爲 - 這掃清了生命週期概念
import React from 'react';
import Person from './Person';
export default class Form extends React.Component {
constructor(props) {
super(props);
this.state = { name: '' } ;
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({ name: event.currentTarget.value });
}
render() {
return (
<div>
<input type="text" onChange={ this.handleChange } />
<Person name={ this.state.name } />
</div>
);
}
}
任何時候用戶鍵入到這裏,都會開始更新Person組件。在Component上調用的第一個方法是componentWillReceiveProps(nextProps)傳入新的prop值。這使得我們可以將傳入的道具與我們當前的道具進行比較,並根據價值做出合理的決定。我們可以通過調用this.props來獲得我們當前的道具,並且新值是傳遞給該方法的nextProps參數。
- 1. React - componentWillReceiveProps方法:新vs更新實例
- 2. 生命週期componentWillReceiveProps被多次調用
- 3. ColdFusion CFC實例創建的生命週期是什麼?
- 4. 什麼是Android應用程序生命週期方法? (不是活動生命週期方法。)
- 5. React組件中的「shouldComponentUpdate」生命週期方法的默認實現是什麼
- 6. 方法論和生命週期的現實生活實例
- 7. 什麼是在Python中使用'_rsub__'方法的典型實例?
- 8. python Django DetailView的方法的生命週期是什麼?
- 9. 什麼是Java Server Page的生命週期方法?
- 10. 什麼是管理AudioKit生命週期的正確方法?
- 11. 什麼是Webservice的生命週期?
- 12. Watch App的生命週期是什麼?
- 13. 活動的生命週期是什麼?
- 14. 如何在MobX中使用React生命週期方法?
- 15. 活動實例的生命週期
- 16. 監控ec2實例的生命週期
- 17. Entitymanager實例的生命週期
- 18. 帶有示例的JSF生命週期
- 19. 什麼是MembershipProvider生命週期?
- 20. 什麼是Azure產品生命週期
- 21. Android生命週期方法
- 22. 實例生命週期管理
- 23. AWS AutoScaling - 實例生命週期
- 24. 實例化對象生命週期
- 25. 流星模板實例生命週期
- 26. Java外部實例生命週期
- 27. 應用程序生命週期事件(例如Application_Closing)上的異步方法
- 28. react-transition-group生命週期方法componentWillLeave不被調用
- 29. React,Redux使用生命週期方法清除狀態
- 30. 有關React生命週期方法的更多信息