从路由获取属性
Get properties from Routes
我无法从 <Route />
传递 属性
这是一些代码:
./app.jsx (主应用程序)
import React from 'react'
import { render } from 'react-dom'
import { Router, Route, IndexRoute } from 'react-router'
import App from './components/app'
import Home from './components/home'
import About from './components/about'
render((
<Router>
<Route path="/" component={App}>
<IndexRoute component={Home} title="Home" />
<Route path="about" component={About} title="About" />
</Route>
</Router>
), document.getElementById('app'))
./components/app.jsx
import React from 'react';
import Header from './template/header'
class App extends React.Component {
render() {
return (
<div>
<Header title={this.props.title} />
{this.props.children}
</div>
)
}
}
export default App
./components/template/header.jsx
import React from 'react'
class Header extends React.Component {
render() {
return (
<span>{this.props.title}</span>
)
}
}
export default Header
当我点击 home 路线*时,我希望我的 Header
组件显示 Home
。
当我点击 about 路线时,我希望我的 Header
组件显示 About
.
此时,我的 Header
组件不显示任何内容。 this.props.title
在我的 App
组件中是 undefined
。
看起来您无法从 <Route />
传递属性
有办法实现吗?
或者有别的办法吗?例如,您可以 从 子元素(this.props.children.title
或类似的东西)中 得到一些东西 吗?
看起来路由注入了 routes
属性 和匹配路由列表。列表中的最后一条路线具有您指定的道具。参见 http://codepen.io/anon/pen/obZzBa?editors=001
const routes = this.props.routes;
const lastRoute = routes[routes.length - 1];
const title = lastRoute.title;
我有点犹豫是否要使用它,因为 routes
没有记录在 Injected Props 中,所以我不知道它在版本更新中的可靠性如何。一个更简单的选择是使用 this.props.location.pathname
并维护标题的查找 table。
最好和最灵活的选项可能是 boilerplate-heavy 选项,您可以在其中定义模板,然后跨组件重用它:
class Template extends React.Component {
render() {
return (
<div>
<Header title={this.props.title} />
{this.props.children}
</div>
)
}
}
class About extends React.Component {
render() {
return (
<Template title="About">
Some Content
</div>
)
}
}
我无法从 <Route />
这是一些代码:
./app.jsx (主应用程序)
import React from 'react'
import { render } from 'react-dom'
import { Router, Route, IndexRoute } from 'react-router'
import App from './components/app'
import Home from './components/home'
import About from './components/about'
render((
<Router>
<Route path="/" component={App}>
<IndexRoute component={Home} title="Home" />
<Route path="about" component={About} title="About" />
</Route>
</Router>
), document.getElementById('app'))
./components/app.jsx
import React from 'react';
import Header from './template/header'
class App extends React.Component {
render() {
return (
<div>
<Header title={this.props.title} />
{this.props.children}
</div>
)
}
}
export default App
./components/template/header.jsx
import React from 'react'
class Header extends React.Component {
render() {
return (
<span>{this.props.title}</span>
)
}
}
export default Header
当我点击 home 路线*时,我希望我的 Header
组件显示 Home
。
当我点击 about 路线时,我希望我的 Header
组件显示 About
.
此时,我的 Header
组件不显示任何内容。 this.props.title
在我的 App
组件中是 undefined
。
看起来您无法从 <Route />
有办法实现吗?
或者有别的办法吗?例如,您可以 从 子元素(this.props.children.title
或类似的东西)中 得到一些东西 吗?
看起来路由注入了 routes
属性 和匹配路由列表。列表中的最后一条路线具有您指定的道具。参见 http://codepen.io/anon/pen/obZzBa?editors=001
const routes = this.props.routes;
const lastRoute = routes[routes.length - 1];
const title = lastRoute.title;
我有点犹豫是否要使用它,因为 routes
没有记录在 Injected Props 中,所以我不知道它在版本更新中的可靠性如何。一个更简单的选择是使用 this.props.location.pathname
并维护标题的查找 table。
最好和最灵活的选项可能是 boilerplate-heavy 选项,您可以在其中定义模板,然后跨组件重用它:
class Template extends React.Component {
render() {
return (
<div>
<Header title={this.props.title} />
{this.props.children}
</div>
)
}
}
class About extends React.Component {
render() {
return (
<Template title="About">
Some Content
</div>
)
}
}