2017-10-17 63 views
0

我還在學習反應路由器v4。我想知道究竟是什麼做用location.pathname vs router

const { 
     match, 
     location, 
     layoutBoxed, 
     navCollapsed, 
     navBehind, 
     fixedHeader, 
     sidebarWidth, 
     theme, 
    } = this.props; 

選項1

if(location.pathname === '/500'){ 
     return <Page500 /> 

選項此

獲得位置之間的差異2

<Route path={'/500'} component={Page500} /> 

對於我來說,雖然第一個選項可以正確顯示我的所有內容,但第二個選項即路由器之一,只顯示一半頁面中的組件。 現在,爲什麼會發生這種情況? 選項1個結果 - >enter image description here 選項2結果 - >enter image description here 但主要的點 - >是使用什麼名稱location.path和路由器

+0

您如何獲取組件的位置支撐? – palsrealm

+0

您可以提供** Option 2 **代碼嗎? – palsrealm

+0

好吧,你現在可以看到選項2 – faraz

回答

0

之一與主特徵之間的差作出反應路由器是你可以做的東西,如:

<Route path="/user/:id" component={User} /> 

id將被傳遞到User組件。

Ex。 /user/bob/user/jill都會呈現User組件,但在您的componentDidMount中,您現在可以從API中獲取正確的用戶信息。

隨着location.pathname該任務變得更復雜@palsrealm提到。但首先,location道具必須可供此方法使用。

還有其他的功能,你會失去,但這是我能想到的主要一個。您可以查看Route api documentation here

編輯:至於爲什麼它是呈現不同的,我真的不能沒有更多的上下文回答。例如,是Route包裹在Switch部件像這樣:

<Switch> 
    // Other routes 
    <Route exact path="/500" component={Page500} /> 
</Switch> 
+1

我同意「使用location.pathname這個任務變得更復雜」。但是你不需要拆分路徑來自己獲取ID。你應該使用'match'道具;特別是'match.params.id'來獲得id,如果你自己做。 – palsrealm

+0

沒有。路線是在一個格內 '''return(

); ''' – faraz

+0

根據@ faraz的評論編輯我的答案 – palsrealm

0

選項2<Route path={'/500'} component={Page500} /> 這裏要創建一個路由,其具有的/ 500的路徑並加載部件Page500。這意味着當用戶導航到路由中指定的路徑時,React-Router將呈現定義路由的組件。

選項1

if(location.pathname === '/500'){ 
     return <Page500 /> 
} 

父組件決定何時渲染Page500部件,基於它接收的location道具。這個location道具最終將來自Route或withRouter HOC。這相當於

<Route render={(props)=>{ 
      if(props.location.pathname === '/500'){ 
          return <Page500 />; 
      }else{ 
      return null; 
      } 
      } 
     } 
    /> 

這也可以寫成

<Route path={'/500'} component={Page500} />

所以總結起來,你只能做選項1,如果你從父組件的位置道具,你可以在應用程序的任何地方定義一個Route(選項2)。

編輯: 如果你把所有的航線一樣

return(<div> 
    <Route path={'/500'} component={Page500} /> 
    <Route path={'/confirm-email'} component={PageConfirmEmail} /> 
    <Route path={'/lock-screen'} component={PageLockScreen} /> 
    <Route path={'/login'} component={PageLogin} /> 
    <Route path={'/sign-up'} component={PageSignUp} /> 
    <Route path={'/forgot-password'} component={PageForgotPassword} /> 
    <Route path={'/fullscreen'} component={PageFullscreen} /> 

</div>); 

您正在運行多個路由渲染的風險,這可能是爲什麼你正在半頁選項2.渲染防止這種情況發生,並只有使第一個匹配的路由,您應該添加Switch

return(<div> 
    <Switch> 
    <Route path={'/500'} component={Page500} /> 
    <Route path={'/confirm-email'} component={PageConfirmEmail} /> 
    <Route path={'/lock-screen'} component={PageLockScreen} /> 
    <Route path={'/login'} component={PageLogin} /> 
    <Route path={'/sign-up'} component={PageSignUp} /> 
    <Route path={'/forgot-password'} component={PageForgotPassword} /> 
    <Route path={'/fullscreen'} component={PageFullscreen} /> 
    </Switch> 
</div>); 

更多Switch可以在https://reacttraining.com/react-router/web/api/Switch

找到
+0

是不完整呈現的原因? – faraz

+0

更新了我的答案。檢查鏈接和他們在那裏給出的例子。您的代碼可能會出現類似的情況,這會導致多條路由被渲染,從而使第一條路由呈現在屏幕的一半。 – palsrealm

+0

好吧,我添加了開關,它並沒有改變渲染問題。 – faraz