将this.props.children传递到react-router中的另一个文件
Pass this.props.children to another file in react-router
我尝试在我的页面中使用React -router来渲染一个React组件。
我使用的文件结构如下:
React/
components/
Container/
Sidebar.js
Main.js
Container.js
Header.js
Layout.js
pages/
Main.js
Lesson.js
index.js
所以我想在属于Main.js
的组件中呈现pages
文件夹中的组件。Sidebar.js
键保持导航菜单
这是我尝试的:
index.js
import React from 'react';
import ReactDom from 'react-dom';
import Layout from './components/Layout';
import { Router, Route, IndexRoute, hashHistory } from 'react-router';
import Index from './pages/Index';
import Lesson from './pages/Lesson';
const app = document.getElementById('app');
ReactDom.render(
<Router history={hashHistory} >
<Route path="/" component={Layout} >
<IndexRoute component={Index} ></IndexRoute>
<Route path="lesson" name="lesson" component={Lesson} ></Route>
</Route>
</Router>
,app);
Layout.js
import React from 'react';
import Header from './Header';
import Container from './Container';
export default class Layout extends React.Component {
render() {
return (
<div>
<Header />
<Container />
</div>
);
}
}
Container.js
import React from 'react';
import Sidebar from './Container/Sidebar';
import Main from './Container/Main';
export default class Header extends React.Component {
render() {
return (
<div id="container">
<Sidebar />
<Main />
</div>
);
}
}
Main.js
import React from ' React ';
导出默认类Main扩展React。组件{呈现(){回报({/*这里我想渲染内容*/});}}
Sidebar.js
import React from 'react';
import { Link } from 'react-router';
import sidebarStore from './Sidebar/SidebarStore.js';
export default class Sidebar extends React.Component {
render() {
return (
<div id="nav-md-placeholder">
<nav id="sidebar">
<ul id="main-menu">
<li class="ripple-btn">
<Link to="/">
<span class="item-align-fix">
<i class="glyphicon glyphicon-home" style={{'marginRight': '10px'}}></i>
<strong>
<span>index</span>
</strong>
</span>
</Link>
</li>
<li class="ripple-btn">
<Link to="lesson">
<span class="item-align-fix">
<i class="glyphicon glyphicon-home" style={{'marginRight': '10px'}}></i>
<strong>
<span>lesson</span>
</strong>
</span>
</Link>
</li>
</ul>
</nav>
</div>
);
}
}
当构建应用程序或在浏览器控制台时,我在控制台上没有得到任何错误。当我点击链接时,我重定向到以下url,但什么也没发生:
Click on Index -> http://localhost/new-webclass/#/?_k=gukonu
Click on Lesson -> http://localhost/new-webclass/#/lesson?_k=7mcbcx
我不知道我是否把路线设置错了。官方文档也没有帮助。
这也是我想渲染的Lesson.js的例子:
import React from 'react';
export default class Lesson extends React.Component {
render() {
return (
<h1>Lesson Page</h1>
);
}
}
解决方案见下面随机用户的答案。他提供了一个很好的解释。下面您可以看到我是如何将{this.props.children}
传递到包含所需组件的文件的:
Layout.js
<Container main_content={this.props.children}/>
Container.js
<Main main_content={this.props.main_content}/>
Main.js
render() {
return (
<main class={this.MainContentPlaceholder} id="main-content-placeholder">
<Overlay />
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 center-col">
{this.props.main_content}
</div>
</main>
);
在您的index.js
文件
<Router history={hashHistory} >
<Route path="/" component={Layout} >
<IndexRoute component={Index} ></IndexRoute>
<Route path="lesson" name="lesson" component={Lesson} ></Route>
</Route>
</Router>
<Route path="/" component={Layout} >
作为父路由,其他所有路由都是其sub-routes
。并使用 Layout
组件
所以即使你改变了路由,parent component
仍然在那里,新路由的组件作为children
传递给父组件Layout
,但你没有在Layout
组件中渲染子组件。
Layout.js
文件中,添加以下行 {this.props.children}
, Example
return (
<div>
<Header />
<Container />
{this.props.children}
</div>
);
你可以重新安排它以适应你的需要,但是添加 {this.props.children}
在你想要渲染传递给它的子组件的地方。
编辑
我认为你把事情复杂化了,无论如何你可以这样做
在Layout.js
中,您可以像
<Container>
{this.props.children}
</Container>
在Container.js
中使用相同的方法通过儿童
<Main>
{this.props.children}
</Main>
在Main.js
render() {
return (
<main className={this.MainContentPlaceholder} id="main-content-placeholder">
<Overlay />
<div className="col-xs-12 col-sm-12 col-md-12 col-lg-12 center-col">
{this.props.children}
</div>
</main>
);
记住使用className prop而不是使用class,在React JSX
中,如果你想在element
上设置class
,你必须使用className
prop而不是class
prop
注:我认为这将是最好的,如果你能把所有的视觉元素在你的布局文件,如Header
, Navigation
, Sidebar
, Footer
,然后把this.props.children
在一个wrapper div
,所以包装内的内容将不断变化,因为你在不同的路线之间导航。,你可以更新标题,导航,aside等数据, 活动状态使用你的store。
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 如何设置默认<ui视图>在另一<ui视图>
- 使用Javascript,如何显示<tr>在另一<tr>悬停时,隐藏第二个<tr>
- 当点击另一件事时,将焦点设置为一件事
- Javascript/AngularJs-如何用另一个数组中的对象填充数组
- react router router.HistoryLocation以<noscript>但没有完美的工作
- 数组值的排序以匹配另一个数组ES6
- 选择随机数组元素并放置到另一个数组中
- 根据另一个数组对数组进行排序,包括位置和字符串[ES6]
- jQuery:使用substr()的另一种方法
- 将“潜水高度”设置为“另一潜水高度”
- 我正在创建一个聊天,但每次我发送消息时,它都不会让我再发送另一条消息,就像表格一样;不起作用
- 从一个数组中移除字符串(如果存在于另一个数组)
- 使用 redux-simple-router 导航到另一条路径
- 如何使用react路由器重定向到另一条路由
- 如何在另一台机器上运行React项目?
- 从一个子节点更改parent's状态,并在另一个子节点react-native中使用它
- React/ React -router重定向到一组url
- 将this.props.children传递到react-router中的另一个文件
- 在React-Router文档中,“索引路由”中的这一段是什么意思?部分