gpt4 book ai didi

react-native - react native 路由器通量和 native 基础容器

转载 作者:行者123 更新时间:2023-12-02 03:09:43 26 4
gpt4 key购买 nike

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

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

为了拥有 Header/Content/Footer,这些组件必须包装在容器组件中。我没有找到使用 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>
}
});

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

最佳答案

我有一个想法,也许它可以解决你的问题,如果你只是为你的自定义标题使用 native-base 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;

这是示例代码的截图

enter image description here

我希望它能成为您的一个解决方案,谢谢 :)

关于react-native - react native 路由器通量和 native 基础容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com