【问题标题】:Why does my react/webpack app refresh when I click on a link?为什么单击链接时我的 react/webpack 应用程序会刷新?
【发布时间】:2016-02-12 21:50:00
【问题描述】:

我有一个react 应用程序,我正在使用webpack 构建chunks。我正在使用express 服务器提供所有服务。当我单击link 时,我希望将script 标签添加到index.html。我希望这会下载文件而不是刷新页面。

这是我的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;

该页面可以正常工作,但是当我单击Main 中的reports 链接时,我的页面会刷新,而不仅仅是插入新代码。我做错了什么?

编辑:

这里是“路线/报告”

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;

【问题讨论】:

  • require('./routes/reports')。那看起来像什么?您的页面正在刷新的一个可能原因是 /reports 网址与您路由器中的任何内容都不匹配。

标签: express reactjs webpack


【解决方案1】:

代替

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

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

【讨论】:

  • 两者有什么区别? to 不只是创建一个href 吗?
  • 我查看了 react-router 的源代码。如果您只是通过href 而不是to,它只会是一个简单的锚并且不会通过here 在您的情况下不会执行pushState(例如,不会有任何javascript管理锚上的历史)
猜你喜欢
  • 2019-08-14
  • 2018-11-03
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2014-11-21
  • 1970-01-01
  • 2021-01-13
相关资源
最近更新 更多