【问题标题】:React router dynamic routes not rendering component反应路由器动态路由不渲染组件
【发布时间】:2016-02-24 04:28:52
【问题描述】:

我正在尝试通过以下示例使反应路由器动态路由工作:https://github.com/rackt/react-router/tree/master/examples/huge-apps

这是我的设置:

webpack.config.js:

module.exports = {
  devtool: 'inline-source-map',
  entry: './js/app.js',
  output: {
    path: '../public',
    filename: 'test-app.js',
    chunkFilename: '[id].chunk.js',
    publicPath: '/public/'
  },
  module: {
    loaders: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel',
        query: {
          presets: [
            'es2015',
            'react'
          ]
        }
      }
    ]
  }

./js/app.js:

import React from 'react';
import ReactDOM from 'react-dom';
import { createHistory, useBasename } from 'history';
import { Router } from 'react-router';

const history = useBasename(createHistory)({
  basename: '/'
});

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

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

./components/App.js:

import React from 'react';

console.log('testing');

export default class App extends React.Component {
  render() {
    console.log('App');
    return (
        <div>
          App!
        </div>
    )
  }
}

index.html:

<!doctype html>
<html>
    <head>
        <title>Test App</title>
    </head>
    <body>
        Hello
        <div id="root"></div>
        <script src="public/test-app.js"></script>
    </body>
</html>

当我运行服务器时,我看到 Hello 从 index.html 显示,我还从 App.js 看到 console.log('testing'),但实际的 App.js 组件没有呈现。任何想法为什么?

谢谢!

编辑: 如果我将./components/App.js 更改为下面的 ES5 语法,它可以工作!这是为什么? React 路由器的component: require('./components/App') 是否不适用于 ES6?

var React = require('react');

var App = React.createClass({
  render: function() {
    return (
      <div>
        App!
      </div>
    )
  }
});

module.exports = App;

【问题讨论】:

    标签: javascript reactjs react-router


    【解决方案1】:

    我认为,您使用的是 Babel 6,它们的 changed commonjs require 语法。

    现在,您需要添加default:

    component: require('./components/App').default
    

    我遇到了同样的问题,终于找到了解决办法。

    【讨论】:

    猜你喜欢
    • 2022-10-23
    • 2019-04-25
    • 2017-12-23
    • 2018-07-26
    • 2023-04-03
    • 2020-01-08
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多