如何使用react

时间:2017-01-31 11:31:23

标签: javascript jquery reactjs webpack

我使用react js创建了一个单页Web应用程序。我使用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构建多页面应用的正确方法

4 个答案:

答案 0 :(得分:43)

(确保使用npm安装react-router!)

要使用react-router,请执行以下操作:

  1. 使用Route,IndexRoute组件创建路径的文件

  2. 路由器(带'r'!)组件作为应用程序的顶级组件注入,传递路由文件中定义的路由和历史记录类型(hashHistory, browserHistory)

  3. 添加 {this.props.children} 以确保新页面将在那里呈现
  4. 使用链接组件更改网页
  5. 第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步 应用程序组件(props.children)

    在App组件的渲染中,添加{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值的任何地方,使用链接组件:

    import { Link } from 'react-router';
    (...)
    <Link to="/some/where">Click me</Link>
    

答案 1 :(得分:8)

这是一个广泛的问题,您可以通过多种方式实现这一目标。根据我的经验,我看到很多单页应用程序都有一个入口点文件,例如index.js。该文件将负责“引导”应用程序,并将成为webpack的入口点。

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-routerreduxredux-sagareact-devtools。这样,您只需要在webpack配置中添加一个入口点,从某种意义上说,一切都会崩溃。

当您设置路由器时,您可以选择将组件设置为特定的匹配路由。如果您的网址为/about,则应在您正在使用的任何路由包中创建路由,并使用您需要的任何信息创建About.js的组件。

答案 2 :(得分: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-创建一个Main组件并在其中调用页面(您还应该已经创建了页面组件):

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>

答案 3 :(得分:0)

问题的第二部分得到了很好的回答。这是第一部分的答案:如何使用webpack输出多个文件:

    entry: {
            outputone: './source/fileone.jsx',
            outputtwo: './source/filetwo.jsx'
            },
    output: {
            path: path.resolve(__dirname, './wwwroot/js/dist'),
            filename: '[name].js'      
            },

这将生成2个文件:目标文件夹中的outputone.js和outputtwo.js。