3

我是 react-native 的新手,所以我认为“HTML”而不是“native”可能有点太多了,所以我的问题可能看起来很愚蠢。

我使用 react-native-router-flux 进行路由,并使用原生基础作为一些不错的组件。我也想使用本机基础的页眉/内容/页脚,但我没有找到让它工作的方法。

为了拥有 Header/Content/Footer,这些组件必须包装在 Container 组件中。我没有找到使用 react-native-router-flux 的方法。

我的 Header 在导航栏周围,而 Content 在每个 Scene 组件内。

(对于标题,我做了一个扩展 rnrf 的自定义导航栏:

import { Header } from 'native-base';
import { NavBar } from 'react-native-router-flux';

var NavbarLulu = React.createClass({
    render: function() {
        return <Header>
            <NavBar {...this.props} {...this.state} />
        </Header>
    }
});

var Root = React.createClass({
    render: function() {
        return <Router>
           <Scene key="root" navBar={NavbarLulu}>
               <Scene.......>
           </Scene>
        </Router>
    }
});

请问有什么容器的解决方案吗?

4

1 回答 1

1

我有一个想法,也许它可以解决你的问题,如果你只是使用原生基础 Header 作为你的自定义标题,并从 RNRF 隐藏导航栏,我有一个例子:

首先是定义路线

const App = () => {
return (
      <Router>
        <Scene key="root">
            <Scene key="nav" component={MyContainer} title="Navigation" initial={true} hideNavBar>
              <Scene key="main"  component={ExampleContent} title="MainPage" />
            </Scene>
        </Scene>
      </Router>
   );
}

在父场景中使用hideNavBar以隐藏 RNRF Navbar。然后制作自己的标题

class MyHeader extends Component{
  render(){
    return(
      <Header>
            <Left/>
            <Body>
                <Title>Header</Title>
            </Body>
            <Right />
      </Header>
    )
  }
}

并为子场景制作内容组件

class ExampleContent extends Component{
  render(){
    return (
      <Content>
        <Text>This is some content</Text>
      </Content>
    )
  }
}

之后,制作用于包装 Header 和 Content 的容器

class MyContainer extends Component{
  render(){
    const state = this.props.navigationState;
    const children = state.children;
    return(
      <Container>
        <MyHeader />
        <DefaultRenderer navigationState={children[children.length - 1]} onNavigate={this.props.onNavigate} />
      </Container>
    )
  }
}

Default Renderer用于渲染子场景,因此您只需再次创建没有容器的内容

这是完整的源代码:

import React, { Component } from 'react';
import { Router, Scene, DefaultRenderer } from 'react-native-router-flux';
import { Container, Header, Content, Footer, Left, Right, Body, Title, Text } from "native-base";

class MyHeader extends Component{
  render(){
    return(
      <Header>
            <Left/>
            <Body>
                <Title>Header</Title>
            </Body>
            <Right />
      </Header>
    )
  }
}

class ExampleContent extends Component{
  render(){
    return (
      <Content>
        <Text>This is some content</Text>
      </Content>
    )
  }
}

class MyContainer extends Component{
  render(){
    const state = this.props.navigationState;
    const children = state.children;
    return(
      <Container>
        <MyHeader />
        <DefaultRenderer navigationState={children[children.length - 1]} onNavigate={this.props.onNavigate} />
      </Container>
    )
  }
}

const App = () => {
    return (
          <Router>
            <Scene key="root">
                <Scene key="nav" component={MyContainer} title="Navigation" initial={true} hideNavBar>
                  <Scene key="main"  component={ExampleContent} title="MainPage" />
                </Scene>
            </Scene>
          </Router>
    );
  }

export default App;

这是该示例代码的屏幕截图

在此处输入图像描述

我希望它可以成为您的一种解决方案,谢谢:)

于 2017-07-18T10:56:33.867 回答