react-route,react-hot-loader.webpack(你不能改变<路由器路由>;它会被忽略)

Kev*_*n_Z 13 javascript reactjs webpack webpack-dev-server react-hot-loader

它是用我的第一个项目react,react-router,react-hot-loader,webpack-dev-serverwebpack.当我更改react组件中的代码时,热加载器变得有效,但同时,控制台告诉我一个警告:

你不能改变"路由器路由"; 它会被忽略.

我不知道如何解决这个问题.有代码:

webpack代码:

    var path = require('path');
    var webpack = require('webpack');

    module.exports = {
      devtool: 'source-map' ,
      entry: [
        'webpack-dev-server/client?http://localhost:3000',
        'webpack/hot/only-dev-server',
        './jsx/index'
      ],
      output: {
        path: path.join(__dirname, 'public'),
        filename: 'bundle.js',
        publicPath: '/public/'
      },
      plugins: [
        new webpack.HotModuleReplacementPlugin(),
        new webpack.NoErrorsPlugin()
      ],
      resolve: {
        extensions: ['', '.js', '.jsx', 'json']
      },
      module: {
        loaders: [{
          test: /\.js$/,
          exclude: /node_modules/,   
          loaders: ['react-hot', 'babel'],
          }]
      },
      watch:true
    };
Run Code Online (Sandbox Code Playgroud)

索引代码:

    import React from 'react'
    import ReactDOM  from 'react-dom'
    import { Router, Route, Link } from 'react-router'
    import App from './index/app'
    import About from './index/about'
    import Inbox from './index/inbox'
    class Routers extends React.Component {
      render() {
         return ( 
            <Router>
                <Route path="/" component={App}>
                  <Route path="about" component={About} />
                  <Route path="inbox" component={Inbox} />
                </Route>
            </Router>
          );
        }
    }

ReactDOM.render(<Routers />, document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)

谢谢 !!!!

小智 10

只有你需要做的事情,就是抛弃<Route />render()方法.
因此,有很多方法可以解决这个问题.
最官方的方式是@Stormy说的.
我这样的解决方案:

const routes = (
  <Route path="/" component={App}>
    <Route path="about" component={About} />
    <Route path="inbox" component={Inbox} />
  </Route>
)

// Don't let <Route> in render() method
class Routers extends React.Component {
  render() {
     return ( 
        <Router>
          { routes }
        </Router>
      );
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 1

尝试使用此配置 https://github.com/reactjs/react-router/issues/2704#issuecomment-170940448

  const routeConfig = [
  { path: '/:locale',
    component: App,
    indexRoute: { component: NewsCardsContainer },
    ...
  }
];
return (
  <IntlProvider key="intl" {...intlData}>
    <Router history={history} routes={routeConfig} />
  </IntlProvider>
)
Run Code Online (Sandbox Code Playgroud)