Browse Source

finish

pull/102/head
jingxun 2 years ago
parent
commit
05ea20ffb1
  1. 79
      day26/note/lesson084_use_redirect.md

79
day26/note/lesson084_use_redirect.md

@ -11,3 +11,82 @@
以上便是上节课的主要内容,接下来我们开始这节课的内容。
## 问题
我们目前的情况整个页面的功能是不是都没有问题?但是不知道大家有没有发现,但给我们打开初始页面的时候什么都没有点是什么样子的呢?
![image-20220114144537387](https://file.lynchow.com/2022-01-14-064539.png)
我们上面都没有选中的时候页面默认就什么都不展示,大家有没有觉得这样的话,用户体验很差啊。我们理想化的需求是不是当我们打开页面之后默认帮我选中其中一个导航项啊?那么这个功能怎么实现呢?这就得借助`Redirect`组件来帮我们实现。
## `Redirect`组件
首先我们要用这个组件,我们是不是得了解这个组件是个啥?这个组件从字面意思上来看很简单,就是一个重定向组件。那么这个组件的逻辑是什么呢?
我们先来想一个问题,当我们打开初始页面的时候进不进行路由匹配呢?其实是进行的,那么匹配的路径又是什么呢?
![image-20220114145316270](https://file.lynchow.com/2022-01-14-065321.png)
我们从图中可以看出匹配的路径是`/`,这是一个根路径。但是我们有没有根路径的路由链接?是不是根本都没有根路径的路由链接?而且我们也没有注册根路径的路由。那么什么都没有匹配到会怎么样?是不是返回`index.html`?
但是我们现在的目的是,让我们页面一打开默认去展示其中一个导航项,那么我可不可以理解为,这个路径,你谁也没匹配上,但是你又不想让最终兜底的人`index.html`来给你收拾烂摊子,那我给你指条明路吧,你去`Home`。然后这个路径就把`Home`展示出来了。
## 使用
那么我们了解了这个组件的逻辑之后,那我们来看看怎么用吧:
```jsx
export default class App extends Component {
render() {
return (
<div>
...
<Switch>
<Route path="/about" component={About} />
<Route path="/home" component={Home} />
<Redirect to="/home" />
</Switch>
...
</div>
);
}
}
```
我们来看这段代码,其余的没有做任何改变所以我就给隐藏了。我们在两条`Route`之后写了一个`Redirect`组件,并且给了`to`属性,让该组件重定向到`/home`,这是什么意思?是不是我们在一打开页面的时候,`/`路径先去匹配`/about`,没匹配上,再去匹配`/home`,依然还是没匹配上,那么`Redirect`出来了说你去`/home`吧。然后就展示了`Home`。我们来看一下结果:
![iShot2022-01-14 15.09.43](https://file.lynchow.com/2022-01-14-071009.gif)
大家看,我们输入了`localhost:3000`敲下回车之后是不是默认就跳转到`Home`了啊?那么好这里`Redirect`就完成了重定向的操作,那么我来问一个问题,这个重定向组件我能不能换个位置呢?比如
```jsx
export default class App extends Component {
render() {
return (
<div>
...
<Switch>
<Redirect to="/home" />
<Route path="/about" component={About} />
<Route path="/home" component={Home} />
</Switch>
...
</div>
);
}
}
```
像上面这一段,我把`Redirect`写在了最上方,那么会发生什么呢?
![iShot2022-01-14 15.16.27](https://file.lynchow.com/2022-01-14-071715.gif)
我们看当我们输入了地址之后,路径确实重定向到了`/home`,但是什么都没有展示出来。而且当我们切换导航的时候也依然还是什么都没有展示。这是为什么呢?因为我们把`Redirect`写在最上面,那么是不是在`/home`和`/about`注册之前就已经重定向了?既然重定向了而且我们还用了`Switch,`那么是不是就不会再继续往下匹配啊?所以说页面根本就没有匹配到有组件的路由。
所以说我们不能随便找一个地方就写`Redirect`。
## 总结
- 借助`Redirect`来在路由不匹配的时候来重定向至指定路由
- 不能随便找个位置就写`Redirect`,通常都会写在所有路由的最下面

Loading…
Cancel
Save