Как создать приложение с несколькими страницами, используя
Я создал одностраничное веб-приложение с помощью команды js. Я использовал webpack
для создания пакета всех компонентов. Но теперь я хочу создать много других страниц. Большинство страниц связаны с API-вызовом. т.е. в index.html
, я отобразил содержимое с API
. Я хочу вставить содержимое в другую страницу, анализируя данные из API. Webpack сжимает все, что реагирует, в файле bundle.js
. Однако конфигурация webpack
следующая:
const webpack = require('webpack');
var config = {
entry: './main.js',
output: {
path:'./',
filename: 'dist/bundle.js',
},
devServer: {
inline: true,
port: 3000
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['es2015', 'react']
}
}
]
},
plugins: [
new webpack.DefinePlugin({
'process.env': {
'NODE_ENV': JSON.stringify('production')
}
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
})
]
}
module.exports = config;
Теперь я смущен, какая конфигурация webpack
будет для другой страницы или что это правильный способ создания многостраничного приложения с помощью react.js
Ответы
Ответ 1
(Убедитесь, что установлен маршрутизатор с использованием npm!)
Чтобы использовать реактивный маршрутизатор, вы делаете следующее:
-
Создайте файл с маршрутами, определенными с использованием компонентов Route, IndexRoute
-
Внесите Router (с компонентом 'r'!) в качестве компонента верхнего уровня для вашего приложения, передавая маршруты, определенные в файле маршрутов, и тип истории (hashHistory, browserHistory)
- Добавьте {this.props.children}, чтобы убедиться, что там будут отображаться новые страницы.
- Для изменения страниц используйте Ссылка.
Шаг 1
routes.js
import React from 'react';
import { Route, IndexRoute } from 'react-router';
/**
* Import all page components here
*/
import App from './components/App';
import MainPage from './components/MainPage';
import SomePage from './components/SomePage';
import SomeOtherPage from './components/SomeOtherPage';
/**
* All routes go here.
* Don't forget to import the components above after adding new route.
*/
export default (
<Route path="/" component={App}>
<IndexRoute component={MainPage} />
<Route path="/some/where" component={SomePage} />
<Route path="/some/otherpage" component={SomeOtherPage} />
</Route>
);
Шаг 2 точка входа (где вы делаете инъекцию DOM)
// You can choose your kind of history here (e.g. browserHistory)
import { Router, hashHistory as history } from 'react-router';
// Your routes.js file
import routes from './routes';
ReactDOM.render(
<Router routes={routes} history={history} />,
document.getElementById('your-app')
);
Шаг 3 Компонент App (props.children)
В рендеринге для вашего компонента приложения добавьте {this.props.children}:
render() {
return (
<div>
<header>
This is my website!
</header>
<main>
{this.props.children}
</main>
<footer>
Your copyright message
</footer>
</div>
);
}
Шаг 4 Используйте ссылку для навигации
В любом месте в функции рендеринга компонента возвращайте значение JSX, используйте компонент Link:
import { Link } from 'react-router';
(...)
<Link to="/some/where">Click me</Link>
Ответ 2
Это широкий вопрос, и вы можете достичь этого несколькими способами. По своему опыту я видел много одностраничных приложений, имеющих файл точки входа, такой как index.js
. Этот файл будет отвечать за "загрузку" приложения и будет вашей отправной точкой для веб-пакета.
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import Application from './components/Application';
const root = document.getElementById('someElementIdHere');
ReactDOM.render(
<Application />,
root,
);
Ваш компонент <Application/>
будет содержать следующие части вашего приложения. Вы заявили, что хотите разные страницы, и это заставляет меня думать, что вы используете какую-то маршрутизацию. Это может быть включено в этот компонент вместе с любыми библиотеками, которые должны быть вызваны при запуске приложения. react-router
, redux
, redux-saga
, react-devtools
приходят на ум. Таким образом, вам нужно будет всего лишь добавить одну точку входа в конфигурацию вашего веб-пакета, и все будет в некотором роде.
Когда вы настроите маршрутизатор, у вас будет возможность установить компонент для конкретного согласованного маршрута. Если у вас был URL /about
, вы должны создать маршрут в любом используемом вами пакете маршрутизации и создать компонент About.js
с любой необходимой вам информацией.
Ответ 3
Для веб-приложений я рекомендую вам прочитать эти два примера:
Резюме реализации:
1 - Добавить react-router-dom
:
пряжа
yarn add react-router-dom
или NPM
npm install react-router-dom
2 - Обновите файл index.js
:
import { BrowserRouter } from 'react-router-dom';
ReactDOM.render((
<BrowserRouter>
<App />
</BrowserRouter>
), document.getElementById('root')
);
3 - Создайте главный компонент и назовите там свои страницы (у вас также должны быть уже созданы компоненты страниц):
import React from 'react';
import { Switch, Route } from 'react-router-dom';
import Home from '../pages/Home';
import Signup from '../pages/Signup';
const Main = () => {
return (
<Switch>
<Route exact path='/' component={Home}></Route>
<Route exact path='/signup' component={Signup}></Route>
</Switch>
);
}
export default Main;
4 - Добавьте основной компонент в файл App.js
:
function App() {
return (
<div className="App">
<Navbar />
<Main />
</div>
);
}
5 - Добавить ссылку на ваши страницы где-нибудь
<Link to="/signup">
<button variant="outlined">
Sign up
</button>
</Link>