開發rn的同學都已經知道這個問題很坑了,真的很難弄,網上的方法嘗試過很多,返回的的時候回調,是用的最多的,最開始我也是用的這種方式,但是滑動返回的時候監聽不到。並且用起來也比較麻煩,不但需要在當前頁面做監聽(需要返回刷新的頁面),還需要調用返回函數的頁面,去調用刷新的方法。今天介紹一種,直接對當前頁面監聽的方法,好處不多說,直接上代碼。
先看react-navigation官網的api
舉個栗子
場景:A頁面跳轉到B頁面,然后從B頁面返回A頁面,A頁面需要刷新
A頁面
// 省略引入,以及render以外的代碼
refrensh(e) {
if(!e.state.params.onLoad) return;
this.props.navigation.setParams({ onLoad: false })
console.log(e.state.params);
// 執行需要刷新的邏輯
}
render() {
return (
<View>
<NavigationEvents
// 當頁面獲得焦點的時候,調用刷新的函數(也就是從B頁面返回的時候,會觸發這個監聽函數)
onWillFocus={this.refrensh.bind(this)}
onWillBlur={(e) => {
// 增加onLoad的作用
// 有可能當前頁面返回的時候不需要刷新,就把onLoad設置成false
this.props.navigation.setParams({
onLoad: true
})
}}
/>
</View>
)
}
B頁面很簡單,返回只需要調用goBack方法即可
this.props.navigation.goBack();
end