2016-02-12 2 views
1

У меня есть react приложение, которое я использую webpack для сборки в chunks. Я обслуживаю все с сервером express. Когда я нажимаю на link, я хочу, чтобы тег script был добавлен в index.html. Я ожидаю, что это загрузит файл, а не обновит страницу.Почему обновление моего приложения/webpack обновляется, когда я нажимаю ссылку?

Вот мой server.js:

app.use(express.static('./dist')); 

app.get('/', function (req, res) { 
    res.sendFile(__dirname + '/dist/index.html'); 
}); 

var server = app.listen(3000, function() { 
    console.log("Listening on 3000"); 
} 

Вот мой webpack.config:

module.exports = { 
    entry: { 
     app: './App.js', 
     vendors: vendors 
    }, 
    output: { 
     filename: './bundle.[hash].js', 
     chunkFilename: './[id].[hash].js', 
     path: __dirname + '/dist' 
    }, 
    module: { 
     loaders: [ 
      { 
       test: /\.js?$/, 
       exclude: /(node_modules)/, 
       loader: 'babel', 
       query: { 
        presets: ['react', 'es2015'] 
       } 
      } 
     ] 
    }, 
    plugins: [ 
      new HtmlWebpackPlugin({ 
       template: 'index.ejs' 
      }), 

     new CommonsPlugin({ 
      name: 'vendors', 
      filename: 'vendors.js', 
      minChunks: Infinity 
     }) 
    ] 
}; 

Вот App.js, где все начинается:

const rootRoute = { 
    component: 'div', 
    childRoutes: [ { 
     path: '/', 
     component: Main, 
     childRoutes: [ 
      require('./routes/reports') 
     ] 
    } ] 
}; 

render(
    <Router history={browserHistory} routes={rootRoute} />, document.getElementById('app') 
); 

Наконец здесь, в моем Main.js компоненте который имеет ссылку:

class Main extends React.Component { 
    render() { 
     return (
       <div> 
        <Link href="/reports">Reports</Link> 
        <div> 
         {this.props.children || <Home /> } 
        </div> 
       </div> 
     ) 
    } 
} 

export default Main; 

страница работает, но когда я нажимаю на reports ссылке в Main, моя страница обновляется вместо того, чтобы просто вставить новый код. Что я делаю не так?

EDIT:

Вот `маршруты/отчеты

module.exports = { 
    path: 'reports', 
    getComponents(location, cb) { 
     require.ensure([], (require) => { 
      cb(null, require('./components/Reports')) 
     }) 
    } 
} 

И Reports компонент:

class Reports extends React.Component { 
    render() { 
     return (
       <div> 
        <h2>Reports</h2> 
       </div> 
     ) 
    } 
} 

module.exports = Reports; 
+0

Строка 'require ('./ routes/reports')'. На что это похоже? Возможная причина, по которой ваша страница обновляется, заключается в том, что URL-адрес '/ reports' не соответствует ни одному вашему маршрутизатору. – enjoylife

ответ

2

Вместо

<Link href="/reports">Reports</Link> 

Do

<Link to="/reports">Reports</Link> 
+0

В чем разница между 2? Не 'to' просто создавать' href'? – jhamm

+0

Я рассмотрел исходный код реактивного маршрутизатора. Если вы просто передаете 'href' вместо' to', это будет всего лишь простой якорь и не пройдет [здесь] (https://github.com/reactjs/react-router/blob/master/modules/Link .js # L97), который не будет делать 'pushState' в вашем случае (например, не будет никакого javascript, управляющего историей на вашем якоре) – topheman

Смежные вопросы