没有渲染命令的React-Native导航

时间:2016-07-07 11:03:06

标签: javascript reactjs uinavigationcontroller react-native

有没有将用户重定向到另一个组件(也用它传递参数)而不调用render函数?

几乎在我发现的所有教程中,他们都使用相同的方式:

render() {
return (
  <NavigatorIOS
    style={styles.container}
    initialRoute=\{\{
      title: 'first',
      component: First
    }} />
);

}

现在看看我的代码: 在renderRow中,对于touchablehighlights,我需要能够将用户重定向到带有参数的页面(在这种情况下,我需要使用course_id的参数将用户发送到组件CourseDetail,这样我就可以显示用户课程的详细信息)

&#13;
&#13;
class Courses extends Component {

  constructor(props) {
        super(props);
        this.state = {
          dataSource: new ListView.DataSource({
            rowHasChanged: (row1, row2) => row1 !== row2,
          }),
          loaded: false,
        };
    }

  fetchData() {
    // fetching data here
  }

  componentDidMount() {
    this.fetchData();
  }

  render(){
    if (!this.state.loaded) {
      return this.renderLoadingView();
    }

    return (
      <View style={{
        flex: 1
      }}>
      <ListView
        dataSource={this.state.dataSource}
        renderRow={this.renderRow}
        style={styles.listView}
      />
      </View>
    );
  }

  renderRow(data) {

    var header = (
      <View>
          <View style={styles.rowContainer}>
            <View  style={styles.textContainer}>
              <Text style={styles.title}>{data.nid}</Text>
              <Text style={styles.description} numberOfLines={0}>{data.title}</Text>
            </View>
          </View>
          <View style={styles.separator}></View>
    </View>
    );
///////////
    var cid = [];
    var content = [];
    for(let x=0; x < Object.keys(data.course).length; x++){
      cid[x] = data.course[x].course_id;
      content.push(
        <TouchableHighlight
        underlayColor='#e3e0d7'
        key={x}
        onPress={()=>{console.log(cid[x]);}} //// i need to navigate user to a page with passing arguments (course_id in this case)
        style={styles.child}
        >
        <Text style={styles.child}>
        {data.course[x].title}
        </Text>
        </TouchableHighlight>
      );
    }
    console.log(cid);
    var clist = (
      <View style={styles.rowContainer}>
      {content}
      </View>
    );
////////////
    return (
      <Accordion
        header={header}
        content={clist}
        easing="easeOutCubic"
      />
    );
  }

  renderLoadingView() {
    return (
      <View style={styles.loading}>
        <Text style={styles.loading}>
          Loading Courses, please wait...
        </Text>
      </View>
    );
  }
}

module.exports = Courses;
&#13;
&#13;
&#13;

提前致谢!

1 个答案:

答案 0 :(得分:1)

在此问题的帮助下: React-Native: Cannot access state values or any methods declared from renderRow

我能够通过改变来解决问题:

<ListView
    dataSource={this.state.dataSource}
    renderRow={this.renderRow}
    style={styles.listView}
  />

致:

<ListView
    dataSource={this.state.dataSource}
    renderRow={this.renderRow.bind(this)}
    style={styles.listView}
  />

希望它会帮助那些可能遇到同样问题的人。