导航器不将参数传递给场景

时间:2016-08-18 17:34:02

标签: react-native

所以,我有一个简单的按钮(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); =>未定义。

我试过把#34;电影" 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} />
        }
    }
}
&#13;
&#13;
&#13;

HomepageScreen.js

&#13;
&#13;
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"
        });
    }

}
&#13;
&#13;
&#13;

MovieScreen.js

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

        console.log(this.props.movie);
    }
  
  .....
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分: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"
    }
});