React-router urls don't work when refreshing or writing manually

前端 未结 30 2712
时光取名叫无心
时光取名叫无心 2020-11-21 05:07

I\'m using React-router and it works fine while I\'m clicking on link buttons, but when I refresh my webpage it does not load what I want.

For instance, I am in

30条回答
  •  长发绾君心
    2020-11-21 05:50

    I had this same problem and this solution worked for us..

    Background:

    We are hosting multiple apps on the same server. When we would refresh the server would not understand where to look for our index in the dist folder for that particular app. The above link will take you to what worked for us... Hope this helps, as we have spent quite a hours on figuring out a solution for our needs.

    We are using:

    package.json
    
    "dependencies": {
    "babel-polyfill": "^6.23.0",
    "ejs": "^2.5.6",
    "express": "^4.15.2",
    "prop-types": "^15.5.6",
    "react": "^15.5.4",
    "react-dom": "^15.5.4",
    "react-redux": "^5.0.4",
    "react-router": "^3.0.2",
    "react-router-redux": "^4.0.8",
    "redux": "^3.6.0",
    "redux-persist": "^4.6.0",
    "redux-thunk": "^2.2.0",
    "webpack": "^2.4.1"
    }
    

    my webpack.config.js

    webpack.config.js
    
    /* eslint-disable */
    const path = require('path');
    const webpack = require('webpack');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const babelPolyfill = require('babel-polyfill');
    const HTMLWebpackPluginConfig = new HtmlWebpackPlugin({
      template: __dirname + '/app/views/index.html',
      filename: 'index.html',
      inject: 'body'
    });
    
    module.exports = {
      entry: [
        'babel-polyfill', './app/index.js'
      ],
      output: {
        path: __dirname + '/dist/your_app_name_here',
        filename: 'index_bundle.js'
      },
      module: {
        rules: [{
          test: /\.js$/,
          loader: 'babel-loader',
          query : {
              presets : ["env", "react", "stage-1"]
          },
          exclude: /node_modules/
        }]
      },
      plugins: [HTMLWebpackPluginConfig]
    }
    

    my index.js

    index.js
    
    import React from 'react'
    import ReactDOM from 'react-dom'
    import Routes from './Routes'
    import { Provider } from 'react-redux'
    import { createHistory } from 'history'
    import { useRouterHistory } from 'react-router'
    import configureStore from './store/configureStore'
    import { syncHistoryWithStore } from 'react-router-redux'
    import { persistStore } from 'redux-persist'
    
    const store = configureStore();
    
    const browserHistory = useRouterHistory(createHistory) ({
      basename: '/your_app_name_here'
    })
    const history = syncHistoryWithStore(browserHistory, store)
    
    persistStore(store, {blacklist: ['routing']}, () => {
      console.log('rehydration complete')
    })
    // persistStore(store).purge()
    
    
    ReactDOM.render(
        
          
    , document.getElementById('mount') )

    my app.js

    var express = require('express');
    var app = express();
    
    app.use(express.static(__dirname + '/dist'));
    // app.use(express.static(__dirname + '/app/assets'));
    app.set('views', __dirname + '/dist/your_app_name_here');
    app.engine('html', require('ejs').renderFile);
    app.set('view engine', 'html');
    
    app.get('/*', function (req, res) {
        res.render('index');
    });
    
    app.listen(8081, function () {
      console.log('MD listening on port 8081!');
    });
    

提交回复
热议问题