【问题标题】:What is the best approach for passing parameters from one scene to another scene in react-native在 react-native 中将参数从一个场景传递到另一个场景的最佳方法是什么
【发布时间】:2016-02-06 13:28:03
【问题描述】:

一个简单的问题,你用 ReactNative 写得很好。

使用 ListView 将参数从一个场景传递到另一个场景的最佳方法是什么,其中有项目的详细信息。

  _renderRow (rowData, sectionID, rowID, highlightRow) {
    return (
        <View>
                <TouchableHighlight 
                  onPress={() => this.props.navigator.push({name: 'Item1', data: rowData.name, rowID: rowID})}>
                  <Text>{rowID}.- {rowData.name}</Text>
          </TouchableHighlight>
        </View>
    )
  };

只是我知道可以在navigator.push的路由对象中传递简单的数据,如代码所示。

如何在场景之间传递更复杂的对象? Native React 的正确方法是什么?有什么例子吗?

【问题讨论】:

标签: listview react-native detailsview


【解决方案1】:

我想我已经找到了答案。 使用'passProps'可以发送数据,但我要记住在rederScene的定义中必须要描述相同的参数

在路由Item1中定义props的导航器

<Navigator ref='navigator'
  initialRoute={{name: 'Home'}}
  renderScene={(route, navigator) =>
    switch (route.name) {
    case 'Home': return (
      <Home navigator={navigator}/>
      );
    case 'Item1': return (
      <Item1 navigator={navigator} rowID={route.rowID||-1} passProps={route.passProps||{}}/>
      );    
    }}/>

ListView 组件将 props 传递给 renderRow 中的导航器

  _renderRow (rowData, sectionID, rowID, highlightRow) {
    return (
        <View>
                <TouchableHighlight 
                  onPress={() => this.props.navigator.push({name: 'Item1', rowID: rowID, passProps: rowData})}>
                  <Text>{rowID}.- {rowData.name}</Text>
          </TouchableHighlight>
        </View>
    )
  };

最后,带有道具的 Item1 组件,并保存在状态中。

 componentDidMount() {
    this.setState( { 
        data: this.props.passProps
    });
  };

  render () {
    console.log(this.props);
        return (
            <View>
            <Text>{this.props.rowID}</Text>
            <Text>{this.state.data.name}</Text>
            <SimpleButton
                  onPress={() => this.props.navigator.pop()}
                  customText='Back' />
            </View> 
        );
  }

如果您有任何建议……这是个好地方。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多