我有一个用React.js构建的页面组件。该页面具有标题,内容和顶部工具栏。
这是组件页面的呈现:
<Page noSwipeback>
<Navbar sliding={false}>
<NavLeft>
<Link iconIos="f7:menu" iconMd="material:menu" panelOpen="right" />
</NavLeft>
<NavTitle sliding>{self.state.title}</NavTitle>
</Navbar>
<Toolbar tabbar bottom>
<Link tabLink="#suggestions" tabLinkActive>{RootScope.t['Suggestions']}</Link>
<Link tabLink="#soon">{RootScope.t['Soon']}</Link>
<Link tabLink="#history">{RootScope.t['History']}</Link>
</Toolbar>
<Tabs animated>
<Tab id="suggestions" tabActive>
<ListOrders />
</Tab>
<Tab id="soon">
<Block>
Upcoming orders
</Block>
</Tab>
<Tab id="history">
<Block>
<p>Tab 2 content</p>
</Block>
</Tab>
</Tabs>
</Page>
如您所见,导航栏组件负责页面的标题。 现在,我想将此导航栏作为一个单独的组件(称为“标头”组件)来使用,因此它不是该导航栏块,而是:
<Header title="page's title" />
在标头组件中应该是这样的:
import React from 'react';
import { Navbar, NavLeft, NavTitle, Link } from 'framework7-react';
export default class extends React.Component {
render() {
return (
<Navbar sliding={false}>
<NavLeft>
<Link iconIos="f7:menu" iconMd="material:menu"
panelOpen="right" />
</NavLeft>
<NavTitle sliding>{this.props.title}</NavTitle>
</Navbar>
)
}
}
但是,当我这样做时,Header组件并未与页面正确集成,并且没有像页面中的陌生人一样放置在页面中间。
我试图做的事情:
当我对Header组件进行相同的渲染,但是没有React的组件,但是具有功能渲染时,它可以工作-组件位于应该放置的正确位置。
例如:
// Header component:
export default function(self) {
return (
<Navbar sliding={false}>
<NavLeft>
<Link iconIos="f7:menu" iconMd="material:menu" panelOpen="right" />
</NavLeft>
<NavTitle sliding>{self.state.title}</NavTitle>
</Navbar>
)
}
// main page:
render() {
<div>
{Header(self)}
... rest of the code
</div>
}
所以,像这样:
{Header()}
有效。但是像这样:
<Header />
不是。
那么为什么当使用函数呈现它时,它会正确地放置在父组件中,而呈现为React.js组件时却没有?
答案 0 :(得分:0)
因此,看起来您正在为应用程序使用framework7。如果我不得不猜测,对于<Page>
,<Navbar>
可能需要是直子,否则将无法正确处理。
从函数返回导航栏时,不使用中间的<Header>
标记,因此它又是直接子代(这是示例之间的区别)。
如果您参考文档:https://framework7.io/docs/navbar.html#fixed-navbar-type
固定的导航栏也是页面的一部分,但始终在屏幕上可见,而不取决于页面滚动。在这种情况下,它必须是页面的直接子代,并且如果页面还具有固定的工具栏,则它必须在工具栏之前:
我知道上面的内容不适用于react版本,但是我怀疑对React同样适用。
答案 1 :(得分:0)
我终于找到了答案
我正在使用Framework7,并且在Framework7中,作为App组件下的子组件的每个组件都将自动(通过F7)移至未固定元素的“主要内容”组件。如果要保留标题等固定元素,则应:<Header slot="first">
React不会“触摸”或干扰任何渲染,这是由F7完成的。
您可以在此处了解更多信息: https://framework7.io/react/page.html#page-slots