2017-08-30 26 views
0

我想在最初接收道具以及任何後續道具變化時運行一個函數。因此,我打算檢查道具並在componentDidMountcomponentWillReceiveProps中運行此功能。但是,這似乎是多餘的。我見過人們也在render()裏面檢查道具並運行功能,但我的印象讓人不悅。(React)在道具變化上運行的方法,包括初始道具

我應該在這裏解決什麼問題?

+2

你嘗試過你的第一個方法嗎?將它添加到'componentDidMount'和'componentWillReceiveProps'可能看起來有點多餘..但這些可能是最接近你要找的行爲的兩個生命線,所以使用它們。 –

+0

在每個渲染週期之前調用shouldComponentUpdate/componentWillUpdate, – TimCodes

+0

我不認爲在初始渲染之前調用了「componentWIllUpdate」:https://facebook.github.io/react/docs/react-component.html#componentwillupdate –

回答

2

在單個回調中捕獲componentDidMountcomponentWillReceiveProps是無可替代的。最好的方法是定義一個函數並從這兩個回調中調用它。

我打算檢查道具和運行此功能

是你試圖做一個非常模糊的描述。如果在render函數中完成,只檢查道具單獨看起來沒有問題。但是如果這個部分引起副作用(可以反過來觸發組件重新渲染)將會成爲一個問題。如果是這樣的話,我會說「皺眉」就是輕描淡寫。問題在於你的渲染函數增加了副作用,而這些副作用反過來又引發了更多的重新渲染和渲染。它會立即殺死你的應用程序的性能,甚至可能導致整個事件停止。

0

您的問題標有React和Redux。您是否在使用與connect一起使用的mapStateToProps功能?

如果是這樣,一個可能的答案可能是在mapStateToProps函數中調度此操作(或運行此函數),因爲它將在最初運行,然後每次更新redux狀態。你必須確保這個動作/函數不會導致另一個狀態改變,所以你最終會陷入循環。

編輯:@DuncanThacker指出這可能不是一個好主意,因爲mapStateToProps可能會經常觸發,導致性能問題。好點子。

+1

我不推薦這個。在mapStateToProps()中做東西是非常危險的,因爲它可以非常頻繁地觸發並導致令人討厭的性能問題。 –

+0

@DuncanThacker是的,這似乎是一個合理的關注。將編輯我的答案。謝謝! – jonahe