DefaultRoute'u React Router'da başka bir Route'a ayarlama


99

Aşağıdakilere sahibim:

  <Route name="app" path="/" handler={App}>
    <Route name="dashboards" path="dashboards" handler={Dashboard}>
      <Route name="exploreDashboard" path="exploreDashboard" handler={ExploreDashboard} />
      <Route name="searchDashboard" path="searchDashboard" handler={SearchDashboard} />
      <DefaultRoute handler={DashboardExplain} />
    </Route>
    <DefaultRoute handler={SearchDashboard} />
  </Route>

DefaultRoute kullanılırken, herhangi bir * Gösterge Tablosunun Gösterge Tablosu içinde oluşturulması gerektiğinden SearchDashboard hatalı şekilde oluşturulur.

DefaultRoute'umun "app" Route içinde Route "searchDashboard" a işaret etmesini istiyorum. Bu, React Router ile yapabileceğim bir şey mi yoksa bunun için normal Javascript (bir sayfa yönlendirmesi için) kullanmalı mıyım?

Temel olarak, kullanıcı ana sayfaya giderse, bunun yerine onu arama panosuna göndermek istiyorum. Bu yüzden sanırım eşdeğer bir React Router özelliği arıyorumwindow.location.replace("mygreathostname.com/#/dashboards/searchDashboard");


1
DefaultRoute yerine Redirect kullanmayı denediniz mi? <Redirect from = "/" to = "searchDashboard" />
Jonatan Lundqvist Medén

@ JonatanLundqvistMedén tam da aradığım buydu, teşekkür ederim! Bir cevap olarak yazın ve ben doğru olarak işaretleyeceğim. Gecikmiş yanıt için özür dilerim.
Matthew Herbst

Yanıtlar:


154

DefaultRoute yerine Redirect'i kullanabilirsiniz

<Redirect from="/" to="searchDashboard" />

Yenilemeyle ilgili sorunları önlemek için, Ogglas sayesinde bunu kullanın.

<Redirect exact from="/" to="searchDashboard" />

6
sadece ben miyim, yoksa bunu doğrudan derin bir url'ye ulaşmak için kullanırken, vurmaya çalıştığım rota yerine her zaman "to" url'ye yönlendirilirim?
Pablote

Böyle bir yeniden yönlendirme yapıyorsanız , react-router'dan sizin ve bileşeninizi eklemek için from='/a' to='/a/:id'kullanmanız gerekeceğine dikkat edilmelidir . Ayrıntılar için bkz. Doc<Switch><Redirect><Route>
Kulbear

1
@Kulbear aynı sorunu yaşadım. Ogglas'ın cevabında söylediklerini yapmak işe yaradı.
Alan P.

2
İşe yaraması için büyük olasılıkla bu rotayı <Redirect exact from="/" to="/adaptation" />
sonlandırmanız

Bunu denetlemek kolay, bu yüzden tekrar ediyorum: DarkWalker'ın Yeniden Yönlendirme kuralının önemli kısmı exactbayraktır. Kabul cevabı eksiktir, bu nedenle [neredeyse] tüm rotalarla eşleşir.
dube

56

Kullanmayla ilgili sorun <Redirect from="/" to="searchDashboard" />, örneğin farklı bir URL'niz varsa /indexDashboardve kullanıcı yenile tuşuna basarsa veya kendisine gönderilen bir URL alırsa, kullanıcı /searchDashboardyine de yeniden yönlendirilecektir .

Kullanıcıların siteyi yenilemesini veya URL göndermesini istemiyorsanız, bunu kullanın:

<Route exact path="/" render={() => (
    <Redirect to="/searchDashboard"/>
)}/>

Girişin searchDashboardgerisindeyse bunu kullanın :

<Route exact path="/" render={() => (
  loggedIn ? (
    <Redirect to="/searchDashboard"/>
  ) : (
    <Redirect to="/login"/>
  )
)}/>

37

Yanlışlıkla varsayılan bir yol oluşturmaya çalışıyordum:

<IndexRoute component={DefaultComponent} />
<Route path="/default-path" component={DefaultComponent} />

Ancak bu, aynı bileşeni oluşturan iki farklı yol oluşturur. Bu sadece anlamsız olmakla kalmaz, aynı zamanda kullanıcı arayüzünüzde hatalara neden olabilir, yani <Link/>öğeleri temel alarak stil oluştururkenthis.history.isActive() .

Varsayılan bir yol oluşturmanın doğru yolu (bu, dizin yolu değildir) aşağıdakileri kullanmaktır <IndexRedirect/>:

<IndexRedirect to="/default-path" />
<Route path="/default-path" component={DefaultComponent} />

Bu, react-router 1.0.0'a dayanır. Bkz. Https://github.com/rackt/react-router/blob/master/modules/IndexRedirect.js .


Sizin tarafınızdan Routehalihazırda ele alınan bir şeye sahip olmanın anlamı nedir IndexRoute?
Matthew Herbst

1
Hiçbir anlamı yok ve bunu savunmadığımı açıkça belirtmek için cevabımı düzenledim.
Seth

Bu benim de yaptığım şeydir, ancak /, örneğin /home,.
ericsoco

Görünüşe göre ben arıyorum <IndexRoute>. Gürültü için özür dilerim. stackoverflow.com/questions/32706913/… github.com/reactjs/react-router/blob/master/docs/guides/…
ericsoco

11

Jonathan'ın cevabı bende işe yaramadı. React v0.14.0 ve React Router v1.0.0-rc3 kullanıyorum. Bu yaptı:

<IndexRoute component={Home}/>.

Bu yüzden Matthew's Case'de şunu isteyeceğine inanıyorum

<IndexRoute component={SearchDashboard}/>.

Kaynak: https://github.com/rackt/react-router/blob/master/docs/guides/advanced/ComponentLifecycle.md


Paylaşım için teşekkürler. Bunun için React v0.13 ve React-Router versiyonunu kullanıyordum, yani 1.0 / rc öncesi versiyon. Umarım bu başkalarına yardımcı olur!
Matthew Herbst

Bence bu, bağlamı kaybetmenize neden oluyor. SearchDashboardana sayfaya geldiğinizde göreceğiniz bileşen olacaktır, ancak Dashboarddoğrudan giderseniz onu saran bileşen olmayacaktır /dashboard/searchDashboard. React-router, URL ile eşleşen rotalara dayalı olarak dinamik olarak bir iç içe bileşen hiyerarşisi oluşturur, bu yüzden burada gerçekten bir yönlendirmeye ihtiyacınız olduğunu düşünüyorum.
Stijn de Witt

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

class App extends Component {
  render() {
    return (
      <div>
        <Route path='/'>
          <Redirect to="/something" />
        </Route>
//rest of code here

bu, sunucuyu yerel ana bilgisayara yüklediğinizde sizi / bir şeye yönlendirecek şekilde yapacaktır.


5

GÜNCELLEME : 2020

Yönlendirme kullanmak yerine, tek yapmanız gereken path

Misal:

<Route exact path={["/","/defaultPath"]} component={searchDashboard} />

3

Benzer bir sorunla karşılaştım; Yol işleyicinin hiçbiri eşleşmediğinde varsayılan bir yol işleyici istedim.

Çözümlerim, yol değeri olarak bir joker karakter kullanmaktır. yani, güzergah tanımınızdaki son girdi olduğundan da emin olun.

<Route path="/" component={App} >
    <IndexRoute component={HomePage} />
    <Route path="about" component={AboutPage} />
    <Route path="home" component={HomePage} />
    <Route path="*" component={HomePage} />
</Route>

3

2017'ye girenler için bu yeni çözüm IndexRedirect:

<Route path="/" component={App}>
  <IndexRedirect to="/welcome" />
  <Route path="welcome" component={Welcome} />
  <Route path="about" component={About} />
</Route>

2
 <Route name="app" path="/" handler={App}>
    <Route name="dashboards" path="dashboards" handler={Dashboard}>
      <Route name="exploreDashboard" path="exploreDashboard" handler={ExploreDashboard} />
      <Route name="searchDashboard" path="searchDashboard" handler={SearchDashboard} />
      <DefaultRoute handler={DashboardExplain} />
    </Route>
    <Redirect from="/*" to="/" />
  </Route>

Eşdeğer nedir DefaultRouteiçinde react-routerv4?
Anthony Kong

4
@AnthonyKong ben öyle düşünüyorum: <Route exact path="/" component={Home}/>. reacttraining.com/react-router/web/example/basic
TYMG

1

Tercih edilen yöntem, tepki yönlendiricisini kullanmaktır IndexRoutes bileşenini kullanmaktır

Bunu şu şekilde kullanırsınız (yukarıda bağlantısı verilen react yönlendirici belgelerinden alınmıştır):

<Route path="/" component={App}>
    <IndexRedirect to="/welcome" />
    <Route path="welcome" component={Welcome} />
    <Route path="about" component={About} />
</Route>

0

Bunu, belirli bir URL'de yeniden yönlendirme yapmak ve eski yönlendiriciden yeni yönlendiriciye yeniden yönlendirdikten sonra bileşeni oluşturmak için bu şekilde kullanırsınız.

<Route path="/old-router">
  <Redirect exact to="/new-router"/>
  <Route path="/new-router" component={NewRouterType}/>
</Route>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.