【问题标题】:Reactjs router not rendering any componentReactjs路由器不渲染任何组件
【发布时间】:2019-01-20 10:08:30
【问题描述】:

webpack.config.js

module.exports = {
    entry: {
        app: __dirname + '/src/index.js'
    },
    output: {
      path: __dirname + '/public',
      filename: 'bundle.js'
    },
    mode: 'development',
    devServer: {
        inline: true,
        port: 9999
     },
    module : {
      rules : [
        {
          test : /\.jsx?/,
          loader : 'babel-loader',
          query: {
            presets: ['es2015', 'react']
          }
        }
      ]
    }
  };

src/index.js -- 试试 1

import React, { Component } from 'react';
import { render } from 'react-dom';
import { Router, Route } from 'react-router-dom'
import { createBrowserHistory } from 'history';

const history = createBrowserHistory();

class Car extends Component {
    constructor(props){
        super(props);

        console.log('Inside Car Constructor');
    };
    redner(){
        return(<h1>Cars</h1>);
    }
}

class Home extends Component {
    constructor(props){
        super(props);

        console.log('Inside Constructor');
    };
    render(){
        return (
        <div>
            <h1>Hi</h1>
            <Router history={history}>
                <div>
                    <Route exact path="/" Component={Home} />
                    <Route path="/car" Component={Car} />
                </div>
            </Router>
        </div>
    );
    }
}

render(
    <Home/>,
    document.getElementById('container')
);

index.js -- 尝试 2

class Home extends Component {
    constructor(props){
        super(props);

        console.log('Inside Constructor');
    };
    render(){
        return (<h1>Hi</h1>);
    }
}

render(
    <Router history={history}>
        <Switch>
            <Route exact path="/" Component={Home} />
            <Route path="/car" Component={Car} />
        </Switch>
    </Router>,
    document.getElementById('container')
);

index.js -- 尝试 3

render(
    <Router history={history}>
        <Route exact path="/" Component={Home} />
        <Route path="/car" Component={Car} />
    </Router>,
    document.getElementById('container')
);

index.js -- 尝试 4

import React, { Component } from 'react';
import { render } from 'react-dom';
import { Router, Route, Switch } from 'react-router-dom'
import { createBrowserHistory } from 'history';

const history = createBrowserHistory();

class Car extends Component {
    constructor(props){
        super(props);

        console.log("Inside Car constructor");
    };

    render(){
        return (<h1>Carrssss</h1>);
    }
}

class Home extends Component {
    constructor(props){
        super(props);

        console.log("Inside home constructor");
    };

    render(){
        return (<h1>Hi</h1>);
    }
}

render(
    <Router history={history}>
        <Switch>
            <Route exact path="/" component={Home} />
            <Route path="/car" component={Car} />
        </Switch>
    </Router>, 
    document.getElementById('container')
);

我已经尝试了上述所有方法,但路径似乎不起作用。 在第一次尝试中,/ 似乎有效,但 /car 无效。 在第二次和第三次尝试中,甚至 / 都不适合我。 我该如何解决这个错误?为什么会这样?

我尝试过使用 react-router 和 react-router-dom 包。 尝试使用 BrowserRouter 代替 Router,仍然无法计算出我们的任何东西。

【问题讨论】:

  • “似乎不起作用”是什么意思? javascript 控制台中是否有错误?
  • @AndyRay 不,控制台中没有错误。它只是不渲染组件。我得到一个空白页 / route 和 404 其他人
  • 没有 React Router,你能渲染你的应用吗?
  • 是的,我也可以只渲染 组件。没有路由器什么的。渲染(,document.getElementById('container'));工作正常。
  • 我已经更新了我的答案。你那里有一个错字。它对我来说非常好。

标签: reactjs npm react-router react-router-dom


【解决方案1】:

不是:

<Route exact path="/" Component={Home} />

是的

<Route exact path="/" component={Home} />

注意component 部分。

第二个错误是您的第一次尝试有错字。在Car 组件中,您使用的是render 而不是redner

工作代码:

import { BrowserRouter, Route } from "react-router-dom";

class Car extends React.Component {
  render() {
    return (<h1>Cars</h1>);
  }
}

class Home extends React.Component {
  render() {
    return (
      <div>
        <h1>Hi foo</h1>
        <BrowserRouter>
          <div>
            <Route exact path="/" component={Home} />
            <Route path="/car" component={Car} />
          </div>
        </BrowserRouter>
      </div>
    );
  }
}

ReactDOM.render(
  <Home />,
  document.getElementById("container")
);

【讨论】:

  • 没有任何区别。我可以使用 Try 2 文件获取 Home 路径,但使用 Car Component。它甚至没有进入组件内部,因为即使我正在记录东西,控制台上也没有任何内容
  • 它有所作为,你在这里解决了一个严重的问题。让我们稍微挖掘一下你的情况。
  • 是的,没错。那么我还能在这里检查或做些什么呢?
  • 嘿,感谢您的帮助,也感谢您抽出时间来编写代码。我也无法运行它。仅加载页面需要很长时间,但仍未加载。我不知道现在是什么问题。想不通。如果我发现了什么,我一定会在这里发布。
  • 嘿。我试过这个方法。如果我使用您的代码执行此操作,则我的浏览器不会呈现。它正在进入组件,因为我登录了构造函数,但没有渲染。当我将浏览器路由器放入 ReactDOM.render() 时,它会加载但仅加载 Home 组件。 /car 仍然是 404。我不知道发生了什么。
【解决方案2】:

我突然想到的一件事是你正在抓取一个名为 { Router } 的组件,而 react-router-dom 有一个名为 { BrowserRouter } 的组件通常以这种方式导入

import { BrowserRouter as Router } from 'react-router-dom';

此外,您将自定义 history 属性传递给您的路由器。 React-Router 使用它的 history 属性来确定你在哪里以及要渲染什么。覆盖这可能会导致问题。您可以在 Web 浏览器中使用 React 开发工具亲自查看。所有 Routed 组件和用 WithRouter 包裹的组件都会有一个由 React-Router 传递的 history prop。

【讨论】:

  • 你是对的,但还有一个Router 组件,它可以与自定义历史记录一起使用。看来问题不在于这个。
  • 我相信这只是 BrowserRouter 的别名,我已经尝试过 BrowserRouter。我已经尝试过你上面提到的。还是没有成功。
  • 我没有找到任何文档,其中 { Router } 是有效的导入。 the training kit 有 NativeRouter、MemoryRouter 和 BroswerRouter,但没有需要导入的调用 Router。也许这两个问题的组合(component 上的无效导入和无效案例)可能是问题所在?我会继续寻找其他的。
  • 我已经用另一个观察编辑了我上面的答案。
猜你喜欢
  • 2020-05-25
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
相关资源
最近更新 更多