【问题标题】:React-native Android Navigator -scene blankReact-native Android Navigator -scene 空白
【发布时间】:2016-01-26 09:05:20
【问题描述】:

我尝试做一个导航器的例子,但场景总是空白。一些建议告诉我将 flex:1 设置为导航器,但它不起作用! 这是我的代码: index.android.js:

'use strict';
import React, {
  AppRegistry,
  Component,
  StyleSheet,
  Navigator,
  Text,
  View
} from 'react-native';
import Homepage from './Homepage' ;
class NavigatorTest extends Component {
  render() {
    var defaultName = 'Homepage' ;
    var defaultCom = Homepage ;
    return (
      <Navigator style = {{flex:1}}
        initialRoute = {{name: defaultName,component:Homepage }}
        configureScene = {() => {
          return Navigator.SceneConfigs.VerticalDownSwipeJump ;
        }}
        renderScene = {(route,navigator) => {
          let Component = route.component ;
          if (route.component) {
            return <Component {...route.params} navigator = {navigator} />
          }
        }} />
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#F5FCFF',
  },
});

AppRegistry.registerComponent('NavigatorTest', () => NavigatorTest);

主页.js

import React, {
  Component,
  StyleSheet,
  TouchableOpacity,
  Text,
  View
} from 'react';
import Detailpage from './Detailpage' ;
export  class Homepage extends React.Component {
  static propTypes = {
  };

  constructor(props) {
    super(props);
  }
  _pressButton() {
    const {navigator} = this.props ;
    if(navigator) {
        navigator.push({
            name: 'Detailpage',
            component:Detailpage,
        })
    }
  }

  render() {
    return (
      <View>
        <TouchableOpacity onPress = {this._pressButton}>
            <Text>click to jump to Detailpage!</Text>
        </TouchableOpacity>
      </View>
    );
  }
}

Detailpage.js

import React, {
  Component,
  StyleSheet,
  TouchableOpacity,
  Text,
  View
} from 'react';
import Homepage from './Homepage' ;
export class Detailpage extends React.Component {
  static propTypes = {
  };
  constructor(props) {
    super(props);
  }
  _pressButton() {
    const {navigator} = this.props ;
    if (navigator) {
        navigator.pop() ;
    }
  }
  render() {
    return (
      <View>
        <TouchableOpacity onPress = {this._pressButton}>
            <Text>click to get back</Text>
        </TouchableOpacity>
      </View>
    );
  }
}

我是react-native新手,请多多指教,先谢谢了!

【问题讨论】:

    标签: android react-native navigator


    【解决方案1】:

    尝试稍微简化和分离您的导航器逻辑。这样调试也会更容易。

    class NavigatorTest extends Component {
    
      render() {
        return (
          <Navigator
            initialRoute={{id: 'Homepage'}}
            configureScene={this.configureScene}
            renderScene={this.renderScene}
          />
        );
      }
    
      configureScene() {
        return Navigator.SceneConfigs.VerticalDownSwipeJump;
      }
    
      renderScene(route, navigator) {
        switch(route.id) {
          case 'Homepage':
            return this.renderHomepage(navigator);
          case 'Detailpage':
            return this.renderDetailpage(navigator);
          default:
            throw new Error('No route found for id ' + route.id);
        }
      }
    
      renderHomepage(navigator) {
        return <Homepage navigator={navigator} />;
      }
    
      renderDetailpage(navigator) {
        return <Detailpage navigator={navigator} />;
      }
    
    }
    

    Homepage.js

    ...
    
    _pressButton() {
      this.props.navigator.push({id: 'Detailpage'});
    }
    
    ...
    

    【讨论】:

    • 感谢您的回答,但我得到“未定义不是函数(正在评估'this.renderHomepage(navigator)')”,如何找到该函数?
    【解决方案2】:

    Villeaka 提出的分离 Navigator 逻辑更便于阅读和分析。

    方法“this.renderHomepage(navigator)”在“renderScene”范围内被调用,所以其中的“this”指的是“renderScene”而不是NavigatorTest组件,将“this”传递给一个新的变量,如下所示:

    renderScene(route, navigator) {
    var me = this;
    switch(route.id) {
      case 'Homepage':
        return me.renderHomepage(navigator);
      case 'Detailpage':
        return me.renderDetailpage(navigator);
      default:
        throw new Error('No route found for id ' + route.id);
    }}
    

    【讨论】:

      【解决方案3】:

      我觉得你的导航看起来有点乱,我发现这个视频让它变得如此简单

      https://www.youtube.com/watch?v=jGOst2TLha0

      顺便说一下,我对你的代码的快速理解是

      <Navigator style = {{flex:1}}
          initialRoute = {{name: defaultName,component:Homepage }}
          configureScene = {() => {
            return Navigator.SceneConfigs.VerticalDownSwipeJump ;
          }}
          renderScene = {(route,navigator) => {
            let Component = route.component ;
            if (route.component) {
              return <Component {...route.params} navigator = {navigator} />
            }
      }} />
      

      “让组件”看起来不正确,因为变量名称不应与代码顶部导入的“组件”库相同,导致模棱两可

      【讨论】:

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