【问题标题】:Navigator not passing parameters to scene导航器未将参数传递给场景
【发布时间】:2016-08-18 17:34:01
【问题描述】:

所以,我有一个简单的按钮(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);
    }
  
  .....

【问题讨论】:

    标签: react-native


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 当然。我将文件添加到帖子中。
    • 没有意识到我在答案块中留下了我的评论!我刚刚更新了上面的答案,让我知道这是否有效。
    • 谢谢你,伙计。现在可以了。我不知道是否很多事情都不起作用,因为它们一直在快速变化,但有时即使是网络上最新的指南也不能很好地工作。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2020-07-30
    • 2022-11-11
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多