gpt4 book ai didi

node.js - React-Router 无法在组件内导入组件

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:23 25 4
gpt4 key购买 nike

我在理解如何使用react-router构建路由和页面时遇到了问题,我学习了react的原理,并且正在处理当前发布在24ways上的帖子。我面临的问题是导入组件的能力。

例如,我的路由器设置如下:

// Router
export const routes = {
path: '',
component: appComponent,
childRoutes: [
{
path: '/',
components: {nav: navbarComponent, content: indexComponent}
},
{
path: '/join',
component: {nav: navbarComponent, content: joinComponent}
}
]
};

// appComponent
import React from 'react';

export default class appComponent extends React.Component {
render() {
const { nav, content } = this.props;
return (
<div>
<div className="nav">
{nav}
</div>
<div className="content">
{content}
</div>
</div>
);
}
}

有没有一种方法可以让我不必这样做,而是能够直接导入到我的每个组件中,例如:

// Router
export const routes = {
path: '',
component: appComponent,
childRoutes: [
{
path: '/',
components: indexComponent
},
{
path: '/join',
component: joinComponent
}
]
};

// appComponent
import React from 'react';
import Navbar from 'Navbar';

export default class appComponent extends React.Component {
render() {
return (
<div>
<Navbar />
{this.props.children}
</div>
);
}
}

一直在搜索,找不到解决这个问题的方法,想使用react-router和react,但如果不可能的话,目前似乎不可行。根据我对 React 的理解,相互构建和重用组件的能力是可能的。

这是导航栏组件:

import React from 'react';
import Navbar from 'react-bootstrap/lib/Navbar';
import Nav from 'react-bootstrap/lib/Nav';
import NavItem from 'react-bootstrap/lib/NavItem';

export default class navbarComponent extends React.Component {
render () {
return (
<Navbar inverse>
<Navbar.Header>
<Navbar.Brand>
<a href="#">React-Bootstrap</a>
</Navbar.Brand>
<Navbar.Toggle />
</Navbar.Header>
<Navbar.Collapse className="bs-navbar-collapse">
<Nav>
<NavItem eventKey={1} href="/">Home</NavItem>
</Nav>
<Nav pullRight>
<NavItem eventKey={1} href="/join">Sign Up</NavItem>
<NavItem eventKey={2} href="/login">Login</NavItem>
</Nav>
</Navbar.Collapse>
</Navbar>
)
}
}

我的服务器的代码如下:

// module imports
import express from 'express';
import http from 'http';

// react imports
import React from 'react';
import { renderToString } from 'react-dom/server';
import { match, RoutingContext } from 'react-router';

// route imports
import { routes } from './lib/routes';

const app = express();
app.use(express.static('public'));
app.set('views', __dirname + '/public/views');
app.set('view engine', 'ejs');

app.get('*', (req, res) => {
match({ routes, location: req.url }, (err, redirectLocation, props) => {
if (err) {
res.status(500).send(err.message);
} else if (redirectLocation) {
res.redirect(302, redirectLocation.pathname + redirectLocation.search);
} else if (props) {
const markup = renderToString(<RoutingContext {...props} />);
res.render('index', { markup })
} else {
res.sendStatus(404);
}
});
});

const server = http.createServer(app);

server.listen(3000);
server.on('listening', () => {
console.log('Listening on 3000');
});

最佳答案

我一直在使用如下路线,我是通过 great tutorial from Egghead.io 了解到这一点的

App.js(主条目)

import React from 'react';
import ReactDOM from 'react-dom';
import { Router } from 'react-router';
import routes from './config/routes.jsx';

ReactDOM.render(
<Router>{routes}</Router>,
document.getElementById('my-app')
);

./config/routes.jsx

import React from 'react';
import Main from '../components/Main';
import Index from '../components/Index';
import { Route, IndexRoute } from 'react-router';

export default (
<Route path="/" component={Main}>
<IndexRoute component={Index} />
</Route>
)

../components/Main.jsx

import React from 'react';

class Main extends React.Component {
render() {
return (
<div>
Hello World. Display my children:
{this.props.children}
</div>
);
}
}

export default Main;

../components/Index.jsx

import React from 'react';

class Index extends React.Component {
render() {
return (
<div>
I'm the index Route
</div>
);
}
}

export default Index ;

关于node.js - React-Router 无法在组件内导入组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34813187/

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