0

我是新來的react-native。我們如何通過調用goBack()來刷新/重新載入前一個屏幕?刷新goBack上的前一個屏幕()

比方說,我們有3個屏幕A,B,C

A -> B -> C 

當我們運行在C不言而喻B屏但老態/數據GoBack的()。我們如何刷新它?構造函數不會第二次調用。

+0

你有解決這個問題嗎?請讓我知道,我也面臨同樣的情況。我解決了它。 –

+0

是的@DeepakSachdeva謝謝,但你可能會分享你的發現的知識。 以下幫助我 https://stackoverflow.com/a/46892405/2086124 –

+0

我不知道你是如何具體解決這個問題,因爲我有同樣的問題。您參考下面的答案,但是@Bat用戶提供的三個選項中的哪一個?如果你回答自己的問題並提供解決問題的詳細信息,情況會好很多。因爲,這對真正幫助那些將來會遇到同樣問題的人是很有幫助的。希望你可以發佈它。上帝保佑。 – Edper

回答

1

是的,只有第一次調用構造函數,而且不能調用它兩次。

首先:但是你可以從構造數據的getter/setter分開,把它放在一個功能,這樣您可以向下傳遞函數進入下一場景,每當你回去,你可以簡單地回顧一下功能。

更好:您可以在第一個場景中製作返回功能,該功能還可以在返回時將場景更新並將返回功能關閉。這樣第二個場景就不會意識到你的更新功能是合理的。

最好:您可以在第二個場景中使用redux並分派返回操作。然後在你的減速器中,你照顧回去&刷新你的場景。

0

如果您試圖將新數據導入到先前的視圖中,但它不起作用,那麼您可能需要重新審視將數據傳輸到該視圖中的方式。調用goBack不應影響先前組件的安裝,並且可能不會像您所指出的那樣再次調用其構造函數。

作爲第一步,我會問你是否正在使用Component,PureComponentFunctional Component。根據您的構造函數註釋,它聽起來像是在擴展一個Component類。

如果您使用的是組件,則渲染方法將受制於shouldComponentUpdate,並且您的狀態的值由您控制。

我會推薦使用componentWillReceiveProps來驗證組件正在接收新數據,並確保其狀態已更新以反映新數據。

如果您使用構造函數調用API或某種類型的異步函數,請考慮將該函數移動到您要調用goBack的路由的父組件以及您想要更新的組件最近的數據。然後,您可以要求您的父組件重新查詢該API,或者從子組件更新其狀態。

如果路由C更新應用程序的「狀態/數據」,該更新應該傳播到路由A,B和C的共享父路由,然後作爲道具傳遞。

或者,您可以使用像Redux這樣的狀態管理解決方案來獨立於父/子組件維護該狀態 - 您可以將組件包裝在connect高階組件中,以便在應用程序狀態更改時獲取最新更新。

TL; DR最終,您的問題的答案聽起來像植根於您的應用程序狀態存儲位置。它應該足夠高地存儲在組件層次結構中,以便每條路由始終從其父節點接收最新數據作爲道具。

0

這個回答假設反應本地導航正在使用庫,這是不可能的,因爲它實際上並不擁有的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; 
    }; 
} 

其他事件:willDisappeardidAppeardidDisappear

另一種解決問題的方法是使用像Redux的狀態管理解決方案,提供國家所有的屏幕時,它被更新(而不是僅僅在屏幕轉換。見old react-native-nav/redux example