第一次使用React.js,我想做一些非常简单的事情。
我创建了一个app.js,用于加载包含导航的初始页面并吐出子道具。
我没有将导航放在app.js文件中,而是想创建另一个组件或部分来渲染它。
以下代码:
import React, { Component } from 'react';
import NavLink from './components/NavLinks/NavLinks'
import './App.css';
import { Link } from 'react-router';
class App extends Component {
render() {
return (
<div className="App">
<nav>
<li><NavLink to="/">Home</NavLink></li>
<li><NavLink to="/contact" activeClassName="active">Contact</NavLink></li>
<li><NavLink to="/bad-link" activeClassName="active">Bad Link</NavLink></li>
</nav>
<div className='container'>
{this.props.children}
</div>
</div>
);
}
}
export default App;
我想要的是什么:
class App extends Component {
render() {
return (
<div className="App">
{-- Some component or partial here to render the nav --}
<div className='container'>
{this.props.children}
</div>
</div>
);
}
}
export default App;
答案 0 :(得分:2)
实现这一目标的理想方法是制作无状态功能组件。由于您没有根据导航组件的状态进行更改,因此您可以将其设置为轻量级无状态功能组件,只为您呈现所需的视图。
const navRenderer = () => {
<nav>
<li><NavLink to="/">Home</NavLink></li>
<li><NavLink to="/contact" activeClassName="active">Contact</NavLink</li>
<li><NavLink to="/bad-link" activeClassName="active">Bad Link</NavLink</li>
</nav>
}
export default navRenderer;
现在您可以在App.js文件中导入它:
import navRenderer from 'path/to/navRenderer';
class App extends Component {
render() {
return (
<div className="App">
<NavRenderer />
<div className='container'>
{this.props.children}
</div>
</div>
);
}
}
export default App;
您可以在此处详细了解Stateless Functional Components。
答案 1 :(得分:1)
像这样写:
首先创建一个单独的组件,其中仅包含应用程序的Navigation
部分,如下所示:
class Nav extends Component {
render() {
return (
<div>
<nav>
<li><NavLink to="/">Home</NavLink></li>
<li><NavLink to="/contact" activeClassName="active">Contact</NavLink></li>
<li><NavLink to="/bad-link" activeClassName="active">Bad Link</NavLink></li>
</nav>
</div>
);
}
}
export default Nav;
然后在App
组件中导入此导航文件,并将其直接呈现在render
内,如下所示:
import Nav from './nav'; // import here change the path according to your folder structure
class App extends Component {
render() {
return (
<div className="App">
<Nav/>
<div className='container'>
{this.props.children}
</div>
</div>
);
}
}
export default App;
答案 2 :(得分:0)
您可以创建另一个组件NavLinks
,因为它没有任何状态,您可以将其创建为无状态组件,并在App
中导入,如
const NavLinks= () => {
<nav>
<li><NavLink to="/">Home</NavLink></li>
<li><NavLink to="/contact" activeClassName="active">Contact</NavLink</li>
<li><NavLink to="/bad-link" activeClassName="active">Bad Link</NavLink</li>
</nav>
}
export default NavLinks;
App.js
import NavLinks form 'path/to/NavLinks';
class App extends Component {
render() {
return (
<div className="App">
<NavLinks/>
<div className='container'>
{this.props.children}
</div>
</div>
);
}
}
export default App;