<switch> 在 React Router 中到底有什么用?
What exactly is <switch> used for in React Router?
我是 React 学习的新手,正在尝试使用 react-router-dom 构建一个应用程序。当我遇到术语 'switch' 时,我能够实现基本路由。任何人都可以用我们使用 switch 的用例示例向我解释一下吗?
Switch 遍历 Route 的 children 并渲染第一个匹配当前路径的其他比赛。
由于您是新手,我将花更多时间通过示例进行解释,并添加一些您可能希望方便使用的内容。
正如 Iddler 所说,Switch 或多或少类似于任何其他语言中的 "Switch case" 条件,但通常以它找到的第一个匹配项结束。
<Switch>
<Route path="/home" component={Home} />
<Route path="/about" component="{About} />
</Switch>
这是其最基本用法的示例。开关确定块或条件的开始和结束。每个 Route 检查当前路径。假设我们正在研究 "www.test.com"。所有的"www.test.com"都是根“/”。因此 Route 检查根之后的路径。因此,如果您有 "www.test.com/home",“/home”位于根之后,因此 "Home" 组件将在我们上面的示例中加载,如果您有 "www.test.com/about",则 "About" 组件是已加载。
请注意,您可以使用任何名称。组件和路径不需要相同。
在某些情况下,您可能希望使用 exact
来匹配精确路径。当您有相似的路径时,这很有用。例如“/shop”和“/shop/shoes”。使用 exact
确保 Switch
匹配准确的路径,而不仅仅是第一个。
例如:
<Switch>
<Route exact path="/shop" component={Shop} />
<Route exact path="shop/shoes" component="{Shoes} />
</Switch>
您也可以在不使用 <Switch>
的情况下使用 <Route... />
。
例如:
<Route path="/home" component={Home} />
所以不像直接组件加载,你只加载一个组件,比如 <Home />
路由器使用 URLs。
最后,<Route... />
路径可以使用 url 的数组来加载相同的组件。
例如:
<Switch>
<Route path={[ "/home", "/dashboard", "/house", /start" ]} component={Home} />
<Route exact path={[ "/about", "/about/management", "/about/branches" ]} component="{About} />
</Switch>
希望对您有所帮助。如果您需要任何形式的说明,请告诉我。 :)
更新:
您不必总是以相同的格式编写路由器。以下是您可以使用的另一种格式;
<Router>
<Switch>
<Route path="/home">
<Home />
</Route>
<Route path="/about">
<About />
</Route>
</Switch>
</Router>
现在有像 am 这样的实例,您希望能够处理输入错误 URL 时显示的内容。像一个 404 页面。您可以在没有路径的情况下使用 Router
。所以就像常规的 switch 语句一样,它成为你的默认值。
<Switch>
<Route path="/home" component={Home} />
<Route path="/about" component="{About} />
<Route component="{PageNotFound} />
</Switch>
Switch 组件的工作方式与 Router 组件的工作方式大致相同,这意味着我们仍将拥有需要精确路径等的嵌套 Route 组件。
Switch 的附加功能是它只会呈现第一个匹配的子项。当我们有如下嵌套路由时,这真的很方便:
<Switch>
<Route path="/accounts/new" component={AddForm} />
<Route path={`/accounts/:accountId`} component={Profile} />
</Switch>
假设我们将上面的代码放在一个组件中——我们会看到 {AddForm} 和 {Profile} 都会呈现,因为“/accounts/new”可能看起来像是路由到 Router 组件。路由器组件包含所有路由匹配项。 Switch 组件将呈现完全匹配,并且仅呈现完全匹配。这使其成为这些嵌套场景的理想选择。
我是 React 学习的新手,正在尝试使用 react-router-dom 构建一个应用程序。当我遇到术语 'switch' 时,我能够实现基本路由。任何人都可以用我们使用 switch 的用例示例向我解释一下吗?
Switch 遍历 Route 的 children 并渲染第一个匹配当前路径的其他比赛。
由于您是新手,我将花更多时间通过示例进行解释,并添加一些您可能希望方便使用的内容。
正如 Iddler 所说,Switch 或多或少类似于任何其他语言中的 "Switch case" 条件,但通常以它找到的第一个匹配项结束。
<Switch>
<Route path="/home" component={Home} />
<Route path="/about" component="{About} />
</Switch>
这是其最基本用法的示例。开关确定块或条件的开始和结束。每个 Route 检查当前路径。假设我们正在研究 "www.test.com"。所有的"www.test.com"都是根“/”。因此 Route 检查根之后的路径。因此,如果您有 "www.test.com/home",“/home”位于根之后,因此 "Home" 组件将在我们上面的示例中加载,如果您有 "www.test.com/about",则 "About" 组件是已加载。
请注意,您可以使用任何名称。组件和路径不需要相同。
在某些情况下,您可能希望使用 exact
来匹配精确路径。当您有相似的路径时,这很有用。例如“/shop”和“/shop/shoes”。使用 exact
确保 Switch
匹配准确的路径,而不仅仅是第一个。
例如:
<Switch>
<Route exact path="/shop" component={Shop} />
<Route exact path="shop/shoes" component="{Shoes} />
</Switch>
您也可以在不使用 <Switch>
的情况下使用 <Route... />
。
例如:
<Route path="/home" component={Home} />
所以不像直接组件加载,你只加载一个组件,比如 <Home />
路由器使用 URLs。
最后,<Route... />
路径可以使用 url 的数组来加载相同的组件。
例如:
<Switch>
<Route path={[ "/home", "/dashboard", "/house", /start" ]} component={Home} />
<Route exact path={[ "/about", "/about/management", "/about/branches" ]} component="{About} />
</Switch>
希望对您有所帮助。如果您需要任何形式的说明,请告诉我。 :)
更新:
您不必总是以相同的格式编写路由器。以下是您可以使用的另一种格式;
<Router>
<Switch>
<Route path="/home">
<Home />
</Route>
<Route path="/about">
<About />
</Route>
</Switch>
</Router>
现在有像 am 这样的实例,您希望能够处理输入错误 URL 时显示的内容。像一个 404 页面。您可以在没有路径的情况下使用 Router
。所以就像常规的 switch 语句一样,它成为你的默认值。
<Switch>
<Route path="/home" component={Home} />
<Route path="/about" component="{About} />
<Route component="{PageNotFound} />
</Switch>
Switch 组件的工作方式与 Router 组件的工作方式大致相同,这意味着我们仍将拥有需要精确路径等的嵌套 Route 组件。 Switch 的附加功能是它只会呈现第一个匹配的子项。当我们有如下嵌套路由时,这真的很方便:
<Switch>
<Route path="/accounts/new" component={AddForm} />
<Route path={`/accounts/:accountId`} component={Profile} />
</Switch>
假设我们将上面的代码放在一个组件中——我们会看到 {AddForm} 和 {Profile} 都会呈现,因为“/accounts/new”可能看起来像是路由到 Router 组件。路由器组件包含所有路由匹配项。 Switch 组件将呈现完全匹配,并且仅呈现完全匹配。这使其成为这些嵌套场景的理想选择。