اذهب إلى المحتوى

السؤال

نشر

 

أواجه مشكلة في تغيير محتوى الصفحة في React عند إستعمال router. أريد فقط إظهار قائمة من المستخدمين، وعند الضغط على أحد المستخدمين يجب أن ينتقل إلى صفحة خاصة بتفاصيل المستخدم. هنا ملف router الخاص بي:

import React from "react";
import ReactDOM from "react-dom";
import { Router, Route } from "react-router";
import { BrowserRouter } from 'react-router-dom';

import People from "./components/People";
import Profile from "./components/Profile";

ReactDOM.render((
  <BrowserRouter>
        <Route path="/" component={People} />
        <Route path="/profile" component={Profile} />
  </BrowserRouter>
), document.getElementById('root'))

ما يحدث هو أني عندما أذهب إلى المسار /profile لا يتغير محتوى الصفحة بينما أي مسار آخر يعطي خطأ 404 لذا أعتقد أن react-router يعمل بشكل سليم، لكن لا أعلم سبب مشكلة عدم تغير محتوى الصفحة؟

Recommended Posts

  • 1
نشر

في البداية دعنا نفهم كيف يعمل ال router 
على سبيل المثال إذا كان عنوان الموقع الخاص بنا 
www.example.com
فحين الولوج الى الموقع يقوم الروتر بأخذ مابعد .com  وهنا الإفتراضي هو "/"والبحث عنه بأسلوب إذا وجدت اي مسار داخل ال BrowserRouter يبدأ ب "/" فقم بعرض المكون الخاص بهذا المسار 

ولذا ففي المثال المرفق حينما تقوم بتغير المسار إالى "www.example.com/profile"  يقوم الروتر بإقتطاع الجزء بعد .com وهو "profile/"  ويذهب ليبحث ويرى أي مسار يبدأ بأي شئ يطابق "profile/" في الترتيب حيث أن اول جزء هو "/" فيكون متطابقا مع أول مسار "/" فيقوم بعرض المكون الخاص به 

ولذا فيمكننا حل هذا الأمر بعدة طرق منها التالى: 

1- إستخدام Switch 

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

import People from "./components/People";
import Profile from "./components/Profile";

ReactDOM.render(
  <BrowserRouter>
    <Switch>
      <Route path="/" component={People} />
      <Route path="/profile" component={Profile} />
    </Switch>
  </BrowserRouter>,
  document.getElementById("root")
);

2- إستخدام كlلة exact ك props وبالتي سيطابق المسار الموجود بالجزء المقتطع تماما 

ReactDOM.render((
  <BrowserRouter>
        <Route exact path="/" component={People} />
        <Route exact  path="/profile" component={Profile} />
  </BrowserRouter>
), document.getElementById('root'))

 

  • 0
نشر

لا يتغير محتوى الصفحة لأنك تظل في المكون people أو (" / ") لماذا ؟

لأن المسار "profile/" يحتوي على ال "/"  وبالتالي router بإستدعاء ال "/" ولذلك تحتاج لإستخدام الخاصية exact كالتالي

import React from "react";
import ReactDOM from "react-dom";
import { Router, Route } from "react-router";
import { BrowserRouter, Router } from 'react-router-dom'; //react لا تنسى إستدعاء 

import People from "./components/People";
import Profile from "./components/Profile";

ReactDOM.render((
  <BrowserRouter>
        <Route exact path="/" component={People} />
        <Route path="/profile" component={Profile} />
  </BrowserRouter>
), document.getElementById('root'))

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...