16-为前端添加404页面

87 阅读4分钟
回顾

接上篇,上次我们在前端项目中,补全了token校验,但是说实话目前还是有一些其他问题。我们逐一解决,如:我们如果访问其他没有注册的routes,这时候页面显示是白屏,这肯定是不符合我们开发的效果的,因此,本篇文章我们要解决的,就是把其他不定义的routes,默认走向我们配置好的404页面

为什么要有404?

在前端开发中,为什么需要有404页面呢?这主要涉及到用户体验和错误处理的方面。以下是一些原因:

  1. 用户体验:404页面用于告知用户当前请求的页面不存在或无法访问。如果用户在网站上输入了错误的URL或点击了一个无效的链接,服务器将返回404错误码,并显示404页面。这样,用户可以明确知道页面不存在,并且可以返回到其他可用页面,而不是看到一个空白的或者错误的页面。

  2. 错误处理:在前端应用中,有时可能会出现路由错误或其他异常,导致某些页面无法正确加载。为了防止用户因此而感到困惑或不满,通过显示404页面,可以让用户知道出现了问题,并提供一种友好的方式来应对错误情况。

  3. 优化SEO:搜索引擎会索引网站的内容,包括404页面。通过为404页面提供合适的内容和导航链接,可以改善网站的SEO,使搜索引擎更好地理解和索引你的网站。

  4. 统一风格:在一个完善的前端应用中,404页面是站点的一部分,而不是一个默认的错误页面。通过为404页面设计和提供自定义内容,可以确保整个站点在外观和风格上保持一致性。

  5. 分析用户行为:通过监测404页面的访问情况,你可以了解到用户经常访问哪些不存在的页面或无效链接,从而进一步优化你的网站或修复潜在的问题。

综上所述,404页面在前端开发中是一个重要的组成部分,它可以提供良好的用户体验,优化SEO,帮助用户处理错误情况,并为整个站点提供统一的风格。因此,在开发前端页面时,为404页面进行合适的设计和实现是值得考虑的。

编码
  1. 新建abandon-web/src/pages/404.tsx文件
import { history } from '@umijs/max';
// @ts-ignore
import { Button, Result } from 'antd';
import React from 'react';

const NoFoundPage: React.FC = () => (
  <Result
    status="404"
    title="404"
    subTitle="Sorry, the page you visited does not exist."
    extra={
      <Button type="primary" onClick={() => history.push('/')}>
        Back Home
      </Button>
    }
  />
);

export default NoFoundPage;
  1. 添加routes
// {
//   path: '/welcome',
//   component: 'IndexPage',
//   name: '欢迎', // 兼容此写法
//   icon: 'testicon',
//   // 更多功能查看
//   // https://beta-pro.ant.design/docs/advanced-menu
//   // ---
//   // 新页面打开
//   target: '_blank',
//   // 不展示顶栏
//   headerRender: false,
//   // 不展示页脚
//   footerRender: false,
//   // 不展示菜单
//   menuRender: false,
//   // 不展示菜单顶栏
//   menuHeaderRender: false,
//   // 权限配置,需要与 plugin-access 插件配合使用
//   access: 'canRead',
//   // 隐藏子菜单
//   hideChildrenInMenu: true,
//   // 隐藏自己和子菜单
//   hideInMenu: true,
//   // 在面包屑中隐藏
//   hideInBreadcrumb: true,
//   // 子项往上提,仍旧展示,
//   flatMenu: true,


// },

export default [
    {
        name: '首页',
        path: '/home',
        component: './Home',
    },
    {
        name: '权限演示',
        path: '/access',
        component: './Access',
    },
    {
        name: 'CRUD 示例',
        path: '/table',
        component: './Table',
    },
    {path: '/login', layout: false, component: './Login'},
    {
        path: '/',
        redirect: '/home',
    },
    {path: '*', component: './404', exact: false}, // 将通配符路由放在最后,配置 404 页面组件,exact: false 表示匹配所有未定义的路由
];
了解UMI路由匹配规则

在 Umi 中,路由的匹配是按照配置文件中路由的顺序进行的,一旦找到匹配的路由,就会停止匹配,不再继续向下查找。

如果将通配符路由放在前面,它会先匹配所有的路由,包括其他具体定义的路由。这样,其他具体路由将永远不会被匹配到,因为通配符路由会“吞噬”所有路径,导致其他路由无法生效,相当于所有路径都会重定向到通配符路由所指定的组件。

而将通配符路由放在最后,它会在其他路由都不匹配时才被匹配到。这样,其他具体路由都有机会先被匹配,只有当用户访问了不存在的路径时,才会匹配到通配符路由,从而展示 404 页面。

验证

如图所示,在链接中访问不存在的routes,展示404页面即成功!点击Back Home按钮,则会被重定向到/home页面。 image.png