我是新來的react-native。我們如何通過調用goBack()來刷新/重新載入前一個屏幕?刷新goBack上的前一個屏幕()
比方說,我們有3個屏幕A,B,C
A -> B -> C
當我們運行在C不言而喻B屏但老態/數據GoBack的()。我們如何刷新它?構造函數不會第二次調用。
我是新來的react-native。我們如何通過調用goBack()來刷新/重新載入前一個屏幕?刷新goBack上的前一個屏幕()
比方說,我們有3個屏幕A,B,C
A -> B -> C
當我們運行在C不言而喻B屏但老態/數據GoBack的()。我們如何刷新它?構造函數不會第二次調用。
是的,只有第一次調用構造函數,而且不能調用它兩次。
首先:但是你可以從構造數據的getter/setter分開,把它放在一個功能,這樣您可以向下傳遞函數進入下一場景,每當你回去,你可以簡單地回顧一下功能。
更好:您可以在第一個場景中製作返回功能,該功能還可以在返回時將場景更新並將返回功能關閉。這樣第二個場景就不會意識到你的更新功能是合理的。
最好:您可以在第二個場景中使用redux並分派返回操作。然後在你的減速器中,你照顧回去&刷新你的場景。
如果您試圖將新數據導入到先前的視圖中,但它不起作用,那麼您可能需要重新審視將數據傳輸到該視圖中的方式。調用goBack
不應影響先前組件的安裝,並且可能不會像您所指出的那樣再次調用其構造函數。
作爲第一步,我會問你是否正在使用Component,PureComponent或Functional Component。根據您的構造函數註釋,它聽起來像是在擴展一個Component類。
如果您使用的是組件,則渲染方法將受制於shouldComponentUpdate,並且您的狀態的值由您控制。
我會推薦使用componentWillReceiveProps來驗證組件正在接收新數據,並確保其狀態已更新以反映新數據。
如果您使用構造函數調用API或某種類型的異步函數,請考慮將該函數移動到您要調用goBack
的路由的父組件以及您想要更新的組件最近的數據。然後,您可以要求您的父組件重新查詢該API,或者從子組件更新其狀態。
如果路由C更新應用程序的「狀態/數據」,該更新應該傳播到路由A,B和C的共享父路由,然後作爲道具傳遞。
或者,您可以使用像Redux這樣的狀態管理解決方案來獨立於父/子組件維護該狀態 - 您可以將組件包裝在connect
高階組件中,以便在應用程序狀態更改時獲取最新更新。
TL; DR最終,您的問題的答案聽起來像植根於您的應用程序狀態存儲位置。它應該足夠高地存儲在組件層次結構中,以便每條路由始終從其父節點接收最新數據作爲道具。
這個回答假設反應本地導航正在使用庫,這是不可能的,因爲它實際上並不擁有的GoBack()方法...
構造不叫第二次因爲屏幕A和B仍然呈現(但隱藏在屏幕C後面)。如果您需要知道屏幕B何時會再次可見,您可以收聽navigation events。
class ScreenB extends Component {
constructor(props) {
super(props);
// Listen to all events for screen B
this.props.navigator.setOnNavigatorEvent(this.onNavigatorEvent);
}
onNavigatorEvent = event => {
switch (event.id) {
case 'willAppear':
// refresh your state...
break;
};
}
其他事件:willDisappear
,didAppear
,didDisappear
另一種解決問題的方法是使用像Redux的狀態管理解決方案,提供國家所有的屏幕時,它被更新(而不是僅僅在屏幕轉換。見old react-native-nav/redux example。
你有解決這個問題嗎?請讓我知道,我也面臨同樣的情況。我解決了它。 –
是的@DeepakSachdeva謝謝,但你可能會分享你的發現的知識。 以下幫助我 https://stackoverflow.com/a/46892405/2086124 –
我不知道你是如何具體解決這個問題,因爲我有同樣的問題。您參考下面的答案,但是@Bat用戶提供的三個選項中的哪一個?如果你回答自己的問題並提供解決問題的詳細信息,情況會好很多。因爲,這對真正幫助那些將來會遇到同樣問題的人是很有幫助的。希望你可以發佈它。上帝保佑。 – Edper