react router v ^ 4.0.0 Uncaught TypeError: Không thể đọc thuộc tính 'location' của undefined


85

Tôi đang gặp sự cố với bộ định tuyến phản ứng (tôi đang sử dụng phiên bản ^ 4.0.0).

đây là index.js của tôi

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import { Router, Route, Link, browserHistory } from 'react-router';


ReactDOM.render(
  <Router history={browserHistory} >
    <Route path="/" component={App} />

  </Router>,
  document.getElementById('root')
);

App.js chỉ là bất cứ thứ gì. Tôi đang đăng cái cơ bản ở đây, vì nó không phải là vấn đề (tôi tin)

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {
  render() {
    return (
      <div className="App">
        <div className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h2>Welcome to React</h2>
        </div>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    );
  }
}

export default App;

và đây là những gì sẽ xảy ra khi tôi kiểm tra nhật ký bảng điều khiển

Router.js:43 Uncaught TypeError: Cannot read property 'location' of undefined
    at new Router (Router.js:43)
    at ReactCompositeComponent.js:295
    at measureLifeCyclePerf (ReactCompositeComponent.js:75)
    at ReactCompositeComponentWrapper._constructComponentWithoutOwner (ReactCompositeComponent.js:294)
    at ReactCompositeComponentWrapper._constructComponent (ReactCompositeComponent.js:280)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:188)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)

ồ, và đây là package.json đề phòng

{
  "name": "teste2",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^15.4.2",
    "react-dom": "^15.4.2",
    "react-router": "^4.0.0"
  },
  "devDependencies": {
    "react-scripts": "0.9.5"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}

Tôi đã kiểm tra vấn đề này ở những nơi khác, nhưng tôi không tìm ra cách giải quyết nó.

Cảm ơn các bạn rất nhiều vì đã kiên nhẫn và giúp đỡ !!

Câu trả lời:


221

Bạn đang làm sai một số điều.

  1. Đầu tiên, browserHistory không phải là một thứ trong V4, vì vậy bạn có thể xóa nó.

  2. Thứ hai, bạn phải nhập mọi thứ từ react-routerđó react-router-dom.

  3. Thứ ba, react-router-domkhông xuất a Router, thay vào đó, nó xuất a BrowserRouterđể bạn cần import { BrowserRouter as Router } from 'react-router-dom.

Có vẻ như bạn vừa sử dụng ứng dụng V3 của mình và mong đợi nó hoạt động với v4, đây không phải là một ý tưởng tuyệt vời.


3
Đó là một trường hợp tốt haha. tôi đã học từ một khóa học ở Udemy và nó đã sử dụng V3. Tôi đã thử điều đó, không hiệu quả. Tôi đã tìm kiếm một số cách để sử dụng nó trong V4 nhưng tất cả những gì tôi có thể tìm thấy là mọi người bảo tôi hạ cấp. đó là cách tôi kết thúc ở đây. Dù sao, cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn. Tôi thực sự đánh giá cao nó: D
Lucas fersa

Này Tyler, bạn có mã mẫu nào giống nhau không?
MohammedAshrafali

Tôi gặp lỗi tương tự trong bộ định tuyến phản ứng trong 4.1.1 sau khi làm theo các bước sau. Tôi có cần tự tạo đối tượng lịch sử không?
PDN

1
Cảm ơn anh bạn! bằng cách đọc câu trả lời của bạn, tôi phát hiện ra rằng tôi đang gặp lỗi do phiên bản bộ định tuyến phản ứng. Vì tôi không thể tìm thấy một tài liệu tốt cho v4, tôi quyết định hạ xuống V3 và sau đó nó bắt đầu làm việc cho tôi như tôi muốn
sergioviniciuss

@TylerMcGinnis "react-router-dom không xuất ra Bộ định tuyến" github.com/ReactTraining/react-router/blob/… react -router-dom đang đưa ra cảnh báo cho biết sử dụng này Router.
corysimmons

6

Tôi đã thử mọi thứ được đề xuất ở đây nhưng không hiệu quả với tôi. Vì vậy, trong trường hợp tôi có thể giúp bất kỳ ai gặp vấn đề tương tự, mọi hướng dẫn tôi đã kiểm tra đều không được cập nhật để hoạt động với phiên bản 4.

Đây là những gì tôi đã làm để làm cho nó hoạt động

import React from 'react';
import App from './App';

import ReactDOM from 'react-dom';
import {
    HashRouter,
    Route
} from 'react-router-dom';


 ReactDOM.render((
        <HashRouter>
            <div>
                <Route path="/" render={()=><App items={temasArray}/>}/>
            </div>
        </HashRouter >
    ), document.getElementById('root'));

Đó là cách duy nhất tôi quản lý để làm cho nó hoạt động mà không có bất kỳ lỗi hoặc cảnh báo nào.

Trong trường hợp bạn muốn chuyển các đạo cụ cho thành phần của mình cho tôi, cách dễ nhất là:

 <Route path="/" render={()=><App items={temasArray}/>}/>

Tôi có một thiết lập tương tự nhưng trên trang đích của tôi, thành phần đầu tiên của tôi hiển thị mà không bao giờ nhấp vào liên kết menu. Tôi sẽ đăng một câu hỏi Cảm ơn
Si8

3

Thay thế

import { Router, Route, Link, browserHistory } from 'react-router';

Với

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

Nó sẽ bắt đầu hoạt động. Đó là vì react-router-dom xuất BrowserRouter


React-router-dom có ​​thay thế được react-router hay bạn cần cài đặt cả hai?
JohnnyBizzle

Chỉ giữ lại
react
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.