2017-10-18 5 views
0

スタックをリセットして、いくつかの手順をナビゲートしたい。このパターンはうまく機能します:中級コンポーネントをインスタンス化せずに深くナビゲートする

import { NavigationActions } from 'react-navigation' 

const resetAction = NavigationActions.reset({ 
    index: 1, 
    actions: [ 
    NavigationActions.navigate({ routeName: 'List'}), 
    NavigationActions.navigate({ routeName: 'Detail', params: {id: theId}) 
    ] 
}) 
this.props.navigation.dispatch(resetAction) 

問題が1つあります。私はリストをレンダリングしたくありません。詳細ページでは、theIdに基づいてサーバーから項目を取得します。しかし、その前に、リストはサーバーからすべての項目をフェッチしますが、無意味で無駄です。

[詳細]の[戻る]ボタンが機能するには、リストに戻る必要があります。 Listをスタックに入れて、インスタンス化してレンダリングせずにサーバーに余分な負荷をかけることはできませんか?

答えて

0

私が考えることができる最も簡単な解決策は、リクエストまたはレンダリングを行う前に、パラメータをリストコンポーネントに送信し、パラメータをチェックすることです。

import { NavigationActions } from 'react-navigation' 

const resetAction = NavigationActions.reset({ 
    index: 1, 
    actions: [ 
    NavigationActions.navigate({ routeName: 'List', params: { reset: true }}), 
    NavigationActions.navigate({ routeName: 'Detail', params: {id: theId}) 
    ] 
}) 
this.props.navigation.dispatch(resetAction) 

class List extends Component { 
    // ... 
    componentDidMount() { 
    //example for control 
    let list = []; 

    if(this.props.navigation.state.params.reset !== true) { 
     // populate list 
    } 
    this.setState({ list }); 
    } 
    // ... 
} 
+0

このアプローチの問題は、ユーザーが戻るボタンをヒットしたときにListコンポーネントは、まだデータがない以外、レンダリングしなければならないため、リストが空であるということです。私は私の場合、デフォルトの動作に固執し、フェッチを起こさせると思います。答えをありがとう。 –

+0

@TimScottそれはちょっと混乱しています。最終的には、 'goBack()'する可能性があるので、リストをレンダリングしたいと思うでしょう。次に、[この回答](https://stackoverflow.com/a/46796224/2315280)で、この回答に対する無料のアプローチを確認することができます。 – bennygenel

関連する問題