রাউটারের প্রতিক্রিয়া v ^.০.০ আনচাট টাইপ এরির: অপরিজ্ঞিতের সম্পত্তি 'অবস্থান' পড়তে পারে না


91

প্রতিক্রিয়া রাউটারটি নিয়ে আমার কিছুটা সমস্যা হয়েছে (আমি সংস্করণটি ^.০.০ ব্যবহার করছি)।

এটি আমার সূচক.জেএস

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

আমি এটি অন্য জায়গায় পরীক্ষা করে দেখছি, তবে এটি সমাধান করার কোনও উপায় আমি পাইনি।

আপনার ধৈর্য এবং সহায়তার জন্য আপনাকে ধন্যবাদ ছেলেদের !!

উত্তর:


242

আপনি কিছু জিনিস ভুল করছেন।

  1. প্রথমত, ব্রাউজারহিসটরি ভি 4-তে কোনও জিনিস নয়, তাই আপনি এটিকে সরাতে পারেন।

  2. দ্বিতীয়ত, আপনি সমস্ত কিছু আমদানি করছেন react-router, এটি হওয়া উচিত react-router-dom

  3. তৃতীয়ত, react-router-domএকটি রফতানি করে না Router, পরিবর্তে, এটি এমন একটি রফতানি করে BrowserRouterযাতে আপনার প্রয়োজন হয় import { BrowserRouter as Router } from 'react-router-dom

দেখে মনে হচ্ছে আপনি সবেমাত্র আপনার ভি 3 অ্যাপ নিয়েছেন এবং এটি v4 এর সাথে কাজ করার প্রত্যাশা করেছেন, এটি দুর্দান্ত ধারণা নয়।


4
হ্যাঁ, কেন্ডা কেস আমি উডেমির একটি কোর্স থেকে শিখছিলাম এবং এটি ভি 3 ব্যবহার করে। আমি চেষ্টা করেছিলাম, কাজ হয়নি। আমি ভি 4 এ এটি ব্যবহার করার জন্য কিছু উপায় খুঁজে পেয়েছি তবে আমি যা দেখতে পাচ্ছিলাম তারা আমাকে লোক হ্রাস করতে বলেছিল। আমি এখানেই শেষ যাইহোক, আপনার সাহায্যের জন্য অনেক ধন্যবাদ। আমি সত্যিই এটির প্রশংসা করি: ডি
লুকাস ফার্সা

আরে টাইলার, এর জন্য কি আপনার কোনও নমুনা কোড রয়েছে?
মোহাম্মদআশরাফালি

এই পদক্ষেপগুলি অনুসরণ করার পরে আমার 4.1.1-এ প্রতিক্রিয়া-রাউটারে একই ত্রুটি রয়েছে। আমার কি নিজেকে কোনও ইতিহাসের বিষয় তৈরি করার দরকার আছে?
PDN

4
ধন্যবাদ মানুষ! আপনার উত্তরটি পড়ে আমি জানতে পারলাম প্রতিক্রিয়া-রাউটার সংস্করণের কারণে আমার ত্রুটি হচ্ছে। যেহেতু আমি ভি 4 এর জন্য একটি ভাল ডকুমেন্টেশন খুঁজে পাইনি, তাই আমি ভি 3-তে ডাউনগ্রেড করার সিদ্ধান্ত নিয়েছি এবং তারপরে এটি আমার মতো কাজ করা শুরু করেছে
সার্জিওভিনিসিয়াস

@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

4

প্রতিস্থাপন

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

সঙ্গে

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

এটি কাজ শুরু করবে। কারণ প্রতিক্রিয়া-রাউটার-ডোম ব্রাউজাররউটার রফতানি করে


রিঅ্যাক্ট-রাউটার-ডম কি প্রতিক্রিয়া-রাউটারকে প্রতিস্থাপন করে বা আপনার উভয় ইনস্টল করা দরকার?
জনিবিজল

কেবল প্রতিক্রিয়া-রাউটার-ডোম রাখুন
অজয় পোরিয়া

0

সুতরাং আপনি যদি এই কোডটি ব্যবহার করতে চান তবে)

import { useRoutes } from "./routes";

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

export const App = () => {

const routes = useRoutes(true);

  return (

    <Router>

      <div className="container">{routes}</div>

    </Router>

  );

};

// ./routes.js 

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

export const useRoutes = (isAuthenticated) => {
  if (isAuthenticated) {
    return (
      <Switch>
        <Route path="/links" exact>
          <LinksPage />
        </Route>
        <Route path="/create" exact>
          <CreatePage />
        </Route>
        <Route path="/detail/:id">
          <DetailPage />
        </Route>
        <Redirect path="/create" />
      </Switch>
    );
  }
  return (
    <Switch>
      <Route path={"/"} exact>
        <AuthPage />
      </Route>
      <Redirect path={"/"} />
    </Switch>
  );
};

4
হাই, আপনার কোড সম্পর্কে কিছু ইনফস যুক্ত করার বিষয়ে ভাবুন, আপনি কী করেছিলেন তা ব্যাখ্যা করুন।
জিয়ানমার্কো

আমি নামের রুটগুলির সাথে ফোল্ডারে রাউটার ব্যবহার করছি যা আপনি অ্যাপ.জেএসসে আমদানিতে দেখতে পাচ্ছেন এবং আমি যদি প্রমাণিত () হয় তবে আমি এই কোড প্রমাণীকরণটিতে ব্যবহার করি। এবং আমি অ্যাপ্লিকেশনগুলিতে রাউটারগুলি ব্যবহারের জন্য ফাংশনগুলি দিয়েছি
বিপদেনেক

4
আপনি যে ব্যবহারকারীরা এটি পড়েন তাদের পরিস্থিতি এবং সমাধানের সম্পূর্ণ চিত্র থাকতে দেয় যার জন্য উত্তরটি সম্পাদনা করুন
Gianmarco
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.