Używam tego samego komponentu dla trzech różnych tras:
<Router>
<Route path="/home" component={Home} />
<Route path="/users" component={Home} />
<Route path="/widgets" component={Home} />
</Router>
Czy w ogóle da się to połączyć, aby wyglądało jak:
<Router>
<Route path=["/home", "/users", "/widgets"] component={Home} />
</Router>
javascript
reactjs
path
react-router
url-routing
Chetan Garg
źródło
źródło
Odpowiedzi:
W wersji 4.4.0-beta.4 , a także oficjalnie w wersji 5.0.0, możesz teraz określić tablicę ścieżek, które prowadzą do komponentu, np.
Każda ścieżka w tablicy jest ciągiem wyrażenia regularnego.
Dokumentację tego podejścia można znaleźć tutaj .
źródło
exact
atrybut dla pojedynczej ścieżki?yarn upgrade
od 4,3 do 4,4. Czy jest oficjalnie wydany?Przynajmniej zreak-router v4
path
może to być ciąg wyrażenia regularnego, więc możesz zrobić coś takiego:Jak widać, jest to trochę rozwlekłe, więc jeśli twoje
component
/route
jest takie proste, prawdopodobnie nie jest tego warte.I oczywiście, jeśli zdarza się to często, zawsze można utworzyć komponent opakowujący, który pobiera
paths
parametr tablicy , który umożliwia.map
wielokrotne użycie wyrażenia regularnego lub logiki.źródło
/^\/(home|users|widgets)/
Teraz/widgets
będzie pasować, ale/dashboard/widgets
nie będzie pasować.Warning: Failed prop type: Invalid prop
właściwości : ścieżka` typuregexp
dostarczonego doRoute
, oczekiwanostring
.`<Route path="/(new|edit)/user/:id?" ... />
path={`/(${ROUTES.HOME}|${ROUTES.HOME_1})/`}
Nie sądzę, aby tak było, jeśli używasz wersji React Router niższej niż v4.
Możesz jednak użyć
map
tak, jak w przypadku każdego innego komponentu JSX:EDYTOWAĆ
Możesz również użyć wyrażenia regularnego jako ścieżki w React-router v4, o ile jest obsługiwane przez ścieżkę do wyrażenia regularnego . Zobacz odpowiedź @ Cameron, aby uzyskać więcej informacji.
źródło
key
rekwizycie.Począwszy od React-route-dom v5.1.2 można przejść przez wiele ścieżek, jak poniżej
I oczywiście musisz zaimportować plik Home jsx na górze.
źródło
Inna opcja: użyj prefiksu trasy.
/pages
na przykład. Dostaniesz/pages/home
/pages/users
/pages/widgets
A następnie rozwiąż to szczegółowo w
Home
komponencie.źródło
Zgodnie z dokumentacją React Router, proptype 'path' jest typu string, więc nie ma sposobu, aby przekazać tablicę jako właściwości do komponentu Route.
Jeśli chcesz zmienić tylko trasę, możesz użyć tego samego komponentu dla innej trasy, nie ma z tym problemów
źródło
W przypadku reagowania-routera v4.4 możesz po prostu zrobić coś takiego poniżej.
zapisz ścieżkę w zmiennej i przekaż ją poniżej i użyj '|' Operator.
więc dla wszystkich pasujących ścieżek będzie renderować zgodnie z
component={Home}
twoimi potrzebami.źródło