如何使用 react-routes 设置网站
How to setup a website using react-routes
这几天一直在努力学习React和React-router,迷路了。我已经阅读了很多关于如何使用 react-router 的文章,阅读了他们所有的文档,但我还不能把这些点联系起来。
我正在尝试设置一个包含主页、登录和关于页面的网站,应该有一个父导航栏。我有一个服务器 运行 express,我希望能够在用户登录或未登录的情况下更改主页内容。
我现在提供静态文件,所以应该有 index.html、about.html 和 login.html?我已经尝试了服务器端渲染的所有方法(不确定它是否是正确的方法),但所有教程都已过时并且文档似乎连接不当。
我知道应该有一个 App.js 文件、一个 routes.js 和一个客户端-side.js。这是我拥有的:
App.js
var React = require('react');
var socket = require("socket.io-client")("http://localhost:3000");
var Login = require('./Login');
var NavBar = require('./NavigationBar');
var About = require('./About');
module.exports = React.createClass({
render: function(){
return (
<div>
<NavBar />
<Login /> --> I should put something related to routing here? The right component for the url the user typed?
</div>
);
},
});
客户端-side.js
var React = require('react');
var ReactDOM = require('react-dom');
var App = require('./react/App');
ReactDOM.render(<App />, document.getElementById("react-container"));
应用-server.js
var express = require("express");
var http = require('http');
var app = express();
var server = http.createServer(app).listen(3000);
var io = require('socket.io').listen(server);
app.use(express.static(__dirname + "/public"));
console.log("Server listening on http://localhost:3000");
io.on('connection', function(socket){
console.log("Connected to Socket.io with id: %s", socket.id);
});
module.exports = server;
我已经尝试了很多东西,但并没有那么难...我只想拥有一个路由器,并且能够访问用户在服务器上尝试访问的页面...
找到解决方案:
app-server.js:添加了这个
app.get('*', function (request, response){
response.sendFile(path.resolve(__dirname, 'public', 'index.html'))
});
routes.js:已添加
import React from 'react';
import { IndexRoute, Router, Route, browserHistory } from 'react-router';
import { createHistory, useBasename } from 'history'
import App from './App';
import Login from './Login';
import About from './About';
//Removes /#/k_adarwf
const history = useBasename(createHistory)({
basename: '/'
});
module.exports = (<Router history={history} >
<Route path="/" component={App}>
<IndexRoute component={Login} />
<Route path="about" component={About} />
</Route>
</Router>);
App.js:改为
module.exports = React.createClass({
render: function(){
return (
<div>
<NavBar />
{this.props.children}
</div>
);
},
});
这几天一直在努力学习React和React-router,迷路了。我已经阅读了很多关于如何使用 react-router 的文章,阅读了他们所有的文档,但我还不能把这些点联系起来。 我正在尝试设置一个包含主页、登录和关于页面的网站,应该有一个父导航栏。我有一个服务器 运行 express,我希望能够在用户登录或未登录的情况下更改主页内容。 我现在提供静态文件,所以应该有 index.html、about.html 和 login.html?我已经尝试了服务器端渲染的所有方法(不确定它是否是正确的方法),但所有教程都已过时并且文档似乎连接不当。
我知道应该有一个 App.js 文件、一个 routes.js 和一个客户端-side.js。这是我拥有的:
App.js
var React = require('react');
var socket = require("socket.io-client")("http://localhost:3000");
var Login = require('./Login');
var NavBar = require('./NavigationBar');
var About = require('./About');
module.exports = React.createClass({
render: function(){
return (
<div>
<NavBar />
<Login /> --> I should put something related to routing here? The right component for the url the user typed?
</div>
);
},
});
客户端-side.js
var React = require('react');
var ReactDOM = require('react-dom');
var App = require('./react/App');
ReactDOM.render(<App />, document.getElementById("react-container"));
应用-server.js
var express = require("express");
var http = require('http');
var app = express();
var server = http.createServer(app).listen(3000);
var io = require('socket.io').listen(server);
app.use(express.static(__dirname + "/public"));
console.log("Server listening on http://localhost:3000");
io.on('connection', function(socket){
console.log("Connected to Socket.io with id: %s", socket.id);
});
module.exports = server;
我已经尝试了很多东西,但并没有那么难...我只想拥有一个路由器,并且能够访问用户在服务器上尝试访问的页面...
找到解决方案:
app-server.js:添加了这个
app.get('*', function (request, response){
response.sendFile(path.resolve(__dirname, 'public', 'index.html'))
});
routes.js:已添加
import React from 'react';
import { IndexRoute, Router, Route, browserHistory } from 'react-router';
import { createHistory, useBasename } from 'history'
import App from './App';
import Login from './Login';
import About from './About';
//Removes /#/k_adarwf
const history = useBasename(createHistory)({
basename: '/'
});
module.exports = (<Router history={history} >
<Route path="/" component={App}>
<IndexRoute component={Login} />
<Route path="about" component={About} />
</Route>
</Router>);
App.js:改为
module.exports = React.createClass({
render: function(){
return (
<div>
<NavBar />
{this.props.children}
</div>
);
},
});