2017-07-21 1 views
0

Ich baue eine Artikelsuche mit React [15.6.1] und Router [4.1.1] und merkte, dass beim Versuch, direkt auf einen Artikel zuzugreifen, auch die vorherige Komponente geladen wird du ihn nicht derjenige ist, derReact Router v4 verhindert die Ausführung der übergeordneten Routenkomponente

// === Layout ================== 
class Layout extends React.Component { 

    render() { 
     return (
      <Provider store={this.props.store}> 
       <HashRouter> 
        <div> 
         <Switch> 
          <Route exact path="/" component={SearchFilter} /> 
          <Route path="/article/:guid" component={Article} /> 
         </Switch> 
        </div> 
       </HashRouter> 
      </Provider> 
     ); 
    } 

} 

// === SearchFilter ================== 
class SearchFilter extends React.Component { 

    componentDidMount() { 
     console.log('SearchFilter Did Mount'); 
    } 

    render() { 
     return (
      <div>...</div> 
     ); 
    } 

} 

// === Article ================== 
class Article extends React.Component { 

    componentDidMount() { 
     console.log('Article Did Mount'); 
    } 

    render() { 
     return (
      <div>...</div> 
     ); 
    } 

} 

So genannt wird, wenn an die Wurzel gehen localhost: 3000/#/ druckt

// SearchFilter Did Mount 

Und wenn ich einen Artikel direkt zugreifen wie diese localhost: 3000/#/a Artikel/123456 druckt

// SearchFilter Did Mount 
// Article Did Mount 

Also meine Frage ist, wie kann ich es aus läuft die bisherige Route verhindern? Da möchte ich einige Aktionen dorthin versenden, die einige Ajax-Aufrufe an den Webservice auslösen würden.

Dank

Antwort

0

Versuchen Sie stattdessen:

<HashRouter basename="/"> 
    <div> 
     <Switch> 
      <Route exact path="/search" component={SearchFilter} /> 
      <Route path="/article/:guid" component={Article} /> 
     </Switch> 
    </div> 
</HashRouter> 
+0

Hallo Ich habe versucht, das zu vermeiden, denn dann müsste ich umleiten der root/to/search und wenn ich das mache, hört der Artikel auf zu arbeiten – Kup

0

Edit:

enter image description here

Für mich seine gut funktioniert ... So sagte wie ... es ist etwas wirklich seltsam ist und versteckte passiert auf Ihrem Rechner, oder Sie einfach/URL url nach/#/article/123 und es bewirkt, dass das erste Protokoll bleibt in der Konsole, aber seine von der Previ sous url "/" und wenn Sie den Browser per F5 auf die neue URL/#/article/123 neu laden, sehen Sie nur den "Artikel hat mounten"

+0

Hi @Melounek das war ein Tippfehler meinerseits. Ich benutze ** // localhost: 3000/#/** – Kup

+0

Ich habe die Frage jetzt aktualisiert – Kup

+0

Ich denke, Sie müssen nur den ganzen Browser nach Eingabe der URL aktualisieren, denn für mich funktioniert es gut .... (Hinzufügen von #/anythink ... der Browser wird nicht neu geladen) – Melounek

Verwandte Themen