राउटर v ^ 4.0.0 अनकैप्ड टाइपर्रर: अपरिभाषित की संपत्ति 'स्थान' नहीं पढ़ सकता है


85

मुझे राउटर के साथ कुछ परेशानी हो रही है (मैं संस्करण ^ 4.0.0 का उपयोग कर रहा हूं)।

यह मेरा सूचकांक है। जेएस

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 सिर्फ कुछ भी है। मैं यहाँ बुनियादी एक पोस्ट कर रहा हूँ, क्योंकि यह समस्या नहीं है (मुझे विश्वास है)

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;

और यह तब होता है जब मैं कंसोल लॉग की जांच करता हूं

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)

ओह, और यह पैकेज है। केवल मामले में

{
  "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"
  }
}

मैं इसे अन्य स्थानों पर जाँच रहा हूँ, लेकिन मुझे इसे हल करने का कोई तरीका नहीं मिला।

आपके धैर्य और मदद के लिए बहुत बहुत धन्यवाद दोस्तों !!

जवाबों:


221

आप कुछ गलत कर रहे हैं।

  1. सबसे पहले, ब्राउज़रहिस्टर वी 4 में कोई चीज नहीं है, इसलिए आप इसे हटा सकते हैं।

  2. दूसरा, आप सब कुछ आयात कर रहे हैं react-router, यह होना चाहिए react-router-dom

  3. तीसरा, react-router-domनिर्यात नहीं करता है Router, इसके बजाय, यह निर्यात करता है BrowserRouterताकि आपको ज़रूरत हो import { BrowserRouter as Router } from 'react-router-dom

ऐसा लगता है कि आपने सिर्फ अपना V3 ऐप लिया है और उम्मीद है कि यह v4 के साथ काम करेगा, जो कि एक अच्छा विचार नहीं है।


3
यह मामला मामला है। मैं Udemy में एक कोर्स से सीख रहा था और इसमें V3 का उपयोग किया गया था। मैंने कोशिश की, काम नहीं किया। मैंने वी 4 में इसे इस्तेमाल करने का कुछ तरीका देखा, लेकिन मुझे पता चला कि लोग मुझे दहेज में बता रहे हैं। इस तरह मैं यहाँ समाप्त हुआ। वैसे भी, आपकी मदद के लिए बहुत बहुत धन्यवाद। मैं वास्तव में इसकी सराहना करता हूं: डी
लुकास 3

हे टायलर, क्या आपके पास इसके लिए कोई नमूना कोड है?
MohammedAshrafali

इन चरणों का पालन करने के बाद 4.1.1 में प्रतिक्रिया-राउटर में मेरी वही त्रुटि है। क्या मुझे खुद एक इतिहास वस्तु बनाने की आवश्यकता है?
PDN

1
धन्यवाद दोस्त! आपके उत्तर को पढ़कर मुझे पता चला कि प्रतिक्रिया-राउटर संस्करण के कारण मुझे त्रुटि हो रही थी। चूंकि मुझे v4 के लिए एक अच्छा दस्तावेज नहीं मिला, इसलिए मैंने V3 को डाउनग्रेड करने का फैसला किया और फिर मेरे लिए यह काम करना शुरू कर दिया, जैसा कि मैं चाहता था
sergioviniciuss

@TylerMcGinnis "प्रतिक्रिया-रूटर-डोम एक रूटर निर्यात नहीं करता है" github.com/ReactTraining/react-router/blob/… प्रतिक्रिया-रूटर-डोम इस चेतावनी को फेंक रहा है जो उपयोग करने के लिए कहता है Router
सीरियोरिमोंस

6

मैंने यहाँ सुझाई गई हर चीज़ की कोशिश की है लेकिन मेरे लिए काम नहीं किया। इसलिए अगर मैं किसी ऐसे ही मुद्दे पर किसी की मदद कर सकता हूं, तो मेरे द्वारा चेक किया गया हर एक ट्यूटोरियल संस्करण 4 के साथ काम करने के लिए अपडेट नहीं है।

यहाँ मैं इसे काम करने के लिए किया है

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'));

यही एकमात्र तरीका है कि मैंने इसे बिना किसी त्रुटि या चेतावनी के काम करने में कामयाब किया है।

मामले में आप मेरे लिए सबसे आसान तरीका यह है कि अपने घटक के लिए सहारा पास करना चाहते हैं:

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

मेरे पास एक समान सेट अप है, लेकिन मेरे लैंडिंग पृष्ठ पर मेरा पहला घटक मेनू लिंक पर क्लिक किए बिना दिखाता है। मैं एक प्रश्न पोस्ट करूंगा धन्यवाद
Si8

3

बदलने के

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

साथ में

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

यह काम करना शुरू कर देगा। इसका कारण यह है कि प्रतिक्रिया-राउटर-डोम निर्यात करता है BrowserRouter


क्या प्रतिक्रिया-राउटर-डोम प्रतिक्रिया-राउटर को बदल देता है या आपको दोनों स्थापित करने की आवश्यकता है?
जॉनीबिजले

केवल प्रतिक्रिया-राउटर-डोम
अजय पोरिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.