2016-08-18 54 views
0

所以,我有一個簡單的按鈕(TouchableHighlight)調用下面的功能:導航儀沒有參數傳遞到現場

showMovie() { 
 

 
     this.props.navigator.push({ 
 
      name: 'MovieScreen', 
 
      index: 1, 
 
      movie: "terminator" 
 
     }); 
 
    }

它將按預期工作,推動在不同定義的MovieScreen現場文件。

在MovieScreen構造我:

constructor(props) { 
 
     super(props); 
 
     console.log(this.props.movie); 
 
}

我得到的是 「不確定」。

我試着用:console.log(this.props.passProps.movi​​e); =>未定義。

我試着把「電影」參數放入一個passProps對象中=>未定義。

我似乎無法將參數傳遞給場景。如果我打印this.props我找不到任何地方的「電影」變量,但this.props在那裏,它包含導航對象和一切。

從網絡上的例子來看,我正在做數以千計的人做的事情,不同之處在於我的行爲不起作用。

我在做什麼錯了?

更多細節的要求

這是我的應用程序是如何組成:

  • index.android.js
  • HomepageScreen.js
  • MovieScreen.js

index.android.js

class MovieApp extends Component { 
 
    render() { 
 
     return (
 
      <Navigator 
 
       initialRoute={{ name: 'HomepageScreen', title: 'My Initial Scene', index: 0 }} 
 
       renderScene={ this.renderScene } 
 
      /> 
 
     ); 
 
    } 
 

 
    renderScene(route, navigator) { 
 
     if (route.name == 'HomepageScreen') { 
 
      return <HomepageScreen navigator={navigator} /> 
 
     } 
 

 
     if (route.name == 'MovieScreen') { 
 
      return <MovieScreen navigator={navigator} /> 
 
     } 
 
    } 
 
}

HomepageScreen.js

export default class HomepageScreen extends Component { 
 
    constructor(props) { 
 
     super(props); 
 
     var navigator = this.props.navigator; 
 
     
 
    render() { 
 
     return(       
 
     <TouchableNativeFeedback onPress={this.showMovie.bind(this)}> 
 
            <View style={Style.movieButton}> 
 
            <Text style={Style.textStyle1}>Asd</Text> 
 
            </View> 
 
            </TouchableNativeFeedback> 
 
     ); 
 
    } 
 

 
    showMovie() { 
 

 
     this.props.navigator.push({ 
 
      name: 'MovieScreen', 
 
      index: 1, 
 
      movie: "terminator" 
 
     }); 
 
    } 
 

 
}

MovieScreen。JS

export default class MovieScreen extends Component { 
 
    constructor(props) { 
 
     super(props); 
 

 
     console.log(this.props.movie); 
 
    } 
 
    
 
    .....

回答

2

試試這個:

renderScene(route, navigator) { 
    if (route.name == 'HomepageScreen') { 
     return <HomepageScreen navigator={navigator} {...route.passProps} /> 
    } 

    if (route.name == 'MovieScreen') { 
     return <MovieScreen navigator={navigator} {...route.passProps} /> 
    } 
} 

並傳遞道具這樣的:

this.props.navigator.push({ 
    name: 'MovieScreen', 
    index: 1, 
    passProps: { 
     movie: "terminator" 
    } 
}); 
+0

肯定。我將這些文件添加到了帖子中。 – daliz

+0

沒有意識到我在回答塊中留下了我的評論!我剛剛更新了上面的答案,讓我知道這是否有效。 –

+1

謝謝你的隊友。它現在有效。我不知道許多事情是否因爲不斷變化而無法正常工作,但有時甚至網絡上的最新指南也不能很好地工作。再次感謝。 – daliz