React-Native Navigator не отображает initialRoute

В процессе обучения себя React-Native. Создание макета розничного сайта iOS, который черпает данные из Firebase, и столкнулся с препятствием при попытке включить Navigator. Мое приложение течет из index.ios.js> MainLayout> Routing> HomeIndex. Вот указанные компоненты:

MainLayout.js

import React, { Component } from 'react';
import { Text } from 'react-native';
import { Container, Header, Title, Content, Footer, FooterTab, Button, Left, Right, Body, Icon } from 'native-base';
import Routing from './Routing';
import HomeIndex from '../pages/HomeIndex';

class MainLayout extends Component {
  render() {
    return (
      <Container>
        <Header>
            <Left>
                <Button transparent>
                </Button>
            </Left>
            <Body>
                <Title>RetailSite</Title>
            </Body>
            <Right />
        </Header>

        <Content>
          <Routing />
        </Content>

        <Footer>
            <FooterTab>
                <Button full>
                    <Text>Footer</Text>
                </Button>
            </FooterTab>
        </Footer>
      </Container>
    );
  }
}

export default MainLayout;

Routing.js

import React, { Component } from 'react';
import { Navigator, View } from 'react-native';
import HomeIndex from '../pages/HomeIndex';
import ShowPage from '../pages/ShowPage';

class Routing extends Component {

  renderScene(route, navigator) {
    if (route.name === 'home') {
      return <HomeIndex navigator={navigator} />
    } else if (route.name === 'show') {
      return <ShowPage navigator={navigator} />
    }
  }

  render() {
    return (
      <Navigator
        initialRoute={{ name: 'home' }}
        renderScene={this.renderScene.bind(this)}
      />
    );
  }
}

export default Routing;

HomeIndex.js

import React, { Component } from 'react';
import { RNRSData } from '../../config/FirebaseConstants';
import { StyleSheet, Text, View, TouchableHighlight, Image, Navigator } from 'react-native';
import styles from '../../../styles.js';

class HomeIndex extends Component {
  constructor(props){
    super(props);
    this.state = {
      allProducts: [],
    }
  }

  componentDidMount() {
    let _this = this;
    let products = {};

    RNRSData.ref('products/').once('value', function(data) {
      data.forEach(function(productNode) {
        let name = productNode.val().name;
        let cost = productNode.val().cost;
        let image = productNode.val().image;
        let idNumber = productNode.key;
        products[name] = {name: name, cost: cost, image: image, id: idNumber}
      })
    }).then(function(product) {
      console.log(product)
      let keys = Object.keys(products).sort();
      let sortedHash = {};
      let sortedArray = [];

      for (let i = 0; i < keys.length; i++) {
        let key = keys[i];
        sortedArray.push(sortedHash[key] = products[key]);
      }

      _this.setState({allProducts: sortedArray}, function afterProductSet() {

      });
    })
  }

  render () {
    let allProducts = this.state.allProducts;
    console.log(allProducts);

    return (
      <View>
        <Text style={styles.homeHeader}>New Arrivals</Text>
        <View style={styles.homeIndexContainer}>
            {allProducts.map(function(object) {
              return (
                <View style={styles.liContainer} key={object.id}>
                    <Image source={{uri: object.image}} style={styles.liImage}>
                    <Text style={styles.liTextName}>{object.name}</Text>
                    <Text style={styles.liTextCost}>${object.cost}</Text>
                    </Image>
                </View>
              )
            })}
        </View>
      </View>
    )
  }
}

export default HomeIndex;

В его нынешнем виде мой симулятор отображает верхний и нижний колонтитулы, попадает в console.log в HomeIndex и отображает правильные данные в указанном console.log. Но он не отображает данные, которые он извлекает из Firebase в моем симуляторе.

Если я отключу <Routing /> на <HomeIndex /> в MainLayout.js, он правильно отобразит индекс в симуляторе, что заставляет меня подозревать, что это может быть что-то, что я испортил в Routing.js. Или если навигатор как-то скидывает мой метод componentDidMount. Любая помощь будет оценена.


person mcw    schedule 22.03.2017    source источник
comment
Итак, он работает, но не отображается. Я думаю, вам может потребоваться обернуть свой навигатор вокруг View с помощью flex: 1.   -  person Matt Aft    schedule 23.03.2017
comment
@MattAft, да, я пробовал обернуть Navigator в View, а HomeIndex и ShowPage в моем условном renderScene в Views. Кажется, что ни один из подходов не приносит много пользы.   -  person mcw    schedule 23.03.2017


Ответы (1)


Моя проблема возникла из-за вложения моего компонента <Routing /> в теги <Content> в моем MainLayout.js. Удалил их, и он отображался правильно.

person mcw    schedule 23.03.2017