npm 包 static-router 使用教程

面试官:小伙子,你的数组去重方式惊艳到我了

引言

在前端开发中,我们经常需要使用路由管理页面的跳转和状态等,通常我们会使用框架提供的路由功能,比如 Vue-Router 或 React-Router 等。但对于小型项目或者纯静态页面,引入这些框架则稍显繁琐,此时 static-router 可以成为一个极佳的选择。

static-router 是一个简单的、只提供基本路由功能的 npm 包,它不需要任何特定框架的支持,只需要 JavaScript 语言本身,而且易于使用和上手。本文将详细介绍如何使用 static-router,以及其一些高级用法。

安装和使用

首先我们需要安装它:

--- ------- -------------

然后在项目中引入:

------ ------ ---- ---------------

接下来,就可以使用 Router 类创建一个路由实例,并进行一些基本设置,例如设置根路由和404页面等:

----- ------ - --- --------
  ----- ----------
  ----- ----
  ------- -
    - ----- ---- ---------- ---- --
    - ----- --------- ---------- ----- --
    - ----- ----------- ---------- ------- --
    - ----- ---- ---------- -------- -
  -
--

以上代码创建了一个路由实例,并声明了四个路由:

  • '/'是项目的根路径,对应的组件是 Home;
  • '/about'对应的组件是 About;
  • '/contact'对应的组件是 Contact;
  • '*'表示任何其他路由都会映射到 NotFound 组件。

接下来我们需要将路由实例的 init 方法挂载到页面加载事件上:

------------------------------- -- -- -
  -------------
--

这样,当浏览器加载页面时,路由实例便完成初始化,根据浏览器的 URL 路径,将相应的组件渲染到页面中去。

接下来我们看一下具体的路由实现。

路由实现

在 static-router 中,路由是通过正则表达式匹配实现的。因此,我们需要为每个路由指定一个字符串路径和一个对应的组件对象。

在路由初始化时,我们将所有路由配置加入一个映射表中,并提前对这些路由进行正则表达式的解析,将其转化为对应的匹配规则。

----- ------ -
  -------------------- -
    --------- - ------------ -- ------
    ----------- - -------------- -- --

    -------------- - --
    -----------
  -

  ------ -
    -- ---------- --- ---------- -
      -------------------------------- -------------------
      ----------------------------------- ----------------------
    - ---- -
      ------------------------------------- -- -- -
        --------------
      --
    -

    --------------------------- -- -
      -------------------------- - -----
      ------------ - ------------------------
    --
  -
-

在注册路由时,我们首先获取浏览器当前的 URL 地址,将其中的路径部分与路由规则进行匹配,如果有匹配成功的路由,则将其对应的组件渲染到页面中去;否则就渲染404页面。

----- ------ -
  -- ---

  --------- -
    ----- ---- - --------- --- --------- - ---------------------------------------- - -------------------------------------

    ----- ----- - ----------------
    ----- - ---------- --------- - - ----- -- -------------------

    ----------------------
  -

  ----------- -
    --- ------ ---------- ------ -- ------------------------------- -
      ----- ----- - -----------------------
      -- ------- -
        ------ - --------- ------- ---------------- -
      -
    -
  -

  ----------------- -
    ----- ---- - ------------------------------
    -------------------------- --- -----
  -
-

以上就是 static-router 的基本逻辑,接下来我们看一些高级用法。

高级用法

嵌套路由

由于 static-router 并没有像 Vue-Router 或 React-Router 提供组件嵌套和命名视图的语法糖,我们需要手动编写嵌套路由的逻辑。

例如我们有一个主路由 /dashboard,其中包含了两个子路由:/dashboard/home 和 /dashboard/settings。

----- ------ - --- --------
  ----- ----------
  ----- -------------
  ------- -
    -
      ----- --------
      ---------- -----
      ----------- ----
      ----- ------
    --
    -
      ----- ------------
      ---------- ---------
      ----------- ----
      ----- ----------
    -
  -
--

在路由注册时,我们给每个路由添加了外部容器的 parentPath 和路由名称 name 两个属性,这样我们就可以根据路由名称通过 React.Children.map 提取子组件,并在主组件中使用。

----- --------- ------- --------------- -
  -------- -
    ------ -
      -----
        ------------------
        ----
          ----
            ----- --------------------------------
          -----
          ----
            ----- ----------------------------------------
          -----
        -----
        ---- --------------------
          ---------------------------------------- ----- -- -
            ------ ------------------------- -
              ----- -----------------
              ----------- ------------
            --
          ---
        ------
      ------
    -
  -
-

就这样,我们便完成了嵌套路由的实现。

URL 参数

static-router 也支持对 URL 参数的提取和使用。

例如我们有一个路由 /users/id,其中 id 表示用户ID。在路由注册时,我们可以通过正则表达式表示参数的提取规则,然后通过 match 方法将参数对象传递给组件。

----- ------ - --- --------
  ----- ----------
  ------- -
    -
      ----- -------------
      ---------- -----
      ----- -------
      ------- --------------------------
    -
  -
--

在组件中,我们可以使用 props.params 访问传进来的参数对象。

----- ---- ------- --------------- -
  -------- -
    ----- - -- - - -----------------
    ------ -
      -----
        -------- ---------
      ------
    -
  -
-

注意:由于 static-router 并非为 React 设计,故无法直接通过 props.params 取得传递进来的参数对象。这里我们结合 React 自带的组件钩子 componentWillReceiveProps 进行参数获取。

----- ---- ------- --------------- -
  ------------------ -
    ------------
    ---------- - - --- --------------------- -
  -

  ------------------------------------ -
    --------------- --- ------------------- --
  -

  -------- -
    ------ -
      -----
        -------- --------------------
      ------
    -
  -
-

这样,我们就可以使用静态路由实现 URL 参数的提取和使用。

总结

static-router 是一个简单、易用的 npm 包,适用于小型项目和纯静态页面场景下的路由管理。在使用时只需要引入 JS 文件并创建路由实例即可。本文推荐使用时注意嵌套路由和 URL 参数的使用。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/92924


猜你喜欢

  • npm 包 @aqm/queuelogger 使用教程

    当我们开发前端应用的时候,经常需要记录一些调试信息,以便在出现问题时快速定位问题。在这个过程中,console.log 是最常用的打印方式。但是,随着应用变得越来越复杂,我们很容易产生大量的打印信息,...

    5 年前
  • npm 包 p-timeout 使用教程

    引言 在前端开发中,我们经常会遇到需要设置超时的情况。如果没有超时机制的支持,一旦连接或请求某些资源的时间超过了一定的时间,就会导致程序出现假死的情况,这极大的影响了应用的用户体验。

    5 年前
  • npm 包 fuzzy-filter 使用教程

    前置知识 为了正常使用 fuzzy-filter,你需要对以下技术有一定了解: JavaScript 基础语法 Node.js 环境 NPM 包管理工具 什么是 fuzzy-filter fuzz...

    5 年前
  • npm 包 breach_module 使用教程

    前言 如果你是一名前端开发者,你一定知道 npm,这个用于 Node.js 包管理的工具已经成为前端开发必不可少的一部分。npm 可以让我们轻松地管理各种开源项目和工具,然后在我们的项目中使用这些工具...

    5 年前
  • npm 包 @ansonhkg/utils 使用教程

    前言 在前端开发中,我们常常需要使用各种工具库和插件,这些工具库和插件的使用可以大大提高我们的开发效率。而 npm 是前端开发中最常用的工具库包管理工具之一,而 @ansonhkg/utils 则是一...

    5 年前
  • npm 包 @andywer/babel-traverse-dctypes 使用教程

    简介 @andywer/babel-traverse-dctypes 是一款适用于 Babel 的插件,它允许你在编译过程中获取 AST 中变量的类型信息。这款插件是由 Andy Werth 编写并维...

    5 年前
  • npm 包 @uirouter/angularjs 使用教程

    @uirouter/angularjs 是一个 AngularJS 的路由框架,是原生 ngRoute 的替代品。它提供了更加灵活和强大的路由功能,并且易于使用和扩展,已经成为众多 AngularJS...

    5 年前
  • npm 包 angular-loader 使用教程

    在 Angular 应用开发中,我们经常需要加载一些其它的 JavaScript 库和组件,例如 jQuery 和 Bootstrap 等。为了方便地管理这些库和组件,我们可以使用 npm 包管理工具...

    5 年前
  • npm 包 @104corp/espack 使用教程

    什么是 @104corp/espack @104corp/espack 是一个基于 webpack 的前端打包工具,可用于打包 JavaScript,CSS,图片等资源文件,并且支持多页面和单页面的打...

    5 年前
  • npm 包 @babel/plugin-proposal-unicode-property-regex 使用教程

    什么是 @babel/plugin-proposal-unicode-property-regex @babel/plugin-proposal-unicode-property-regex 是一个 ...

    5 年前
  • npm 包 @babel/plugin-proposal-optional-catch-binding 使用教程

    在前端开发中,经常需要通过 try...catch 语句来捕获代码中的异常,以便更好地处理错误,提高应用程序的健壮性。然而,在进行异常捕获时,有时我们并不想强制要求捕获到的异常必须被绑定到一个变量中,...

    5 年前
  • npm 包 @babel/plugin-proposal-object-rest-spread 使用教程

    简介 在前端开发中,有时我们需要使用对象的扩展语法,即对象拓展运算符 ...。然而,在某些浏览器中,这一语法并不被支持,导致运行时错误。这时候,我们可以使用 Babel 进行转换。

    5 年前
  • npm 包 @babel/plugin-proposal-json-strings 使用教程

    在开发过程中,经常会遇到需要使用 JSON 的情况,尤其是前端项目中。但是如果要使用一些较新的 JSON 功能,就需要使用一些新的插件或是工具。这时候,@babel/plugin-proposal-j...

    5 年前
  • npm 包 @babel/plugin-proposal-dynamic-import 使用教程

    什么是 @babel/plugin-proposal-dynamic-import? @babel/plugin-proposal-dynamic-import 是一个 Babel 插件,可以将动态导...

    5 年前
  • npm 包 @babel/plugin-proposal-async-generator-functions 使用教程

    前言 在 ECMAScript 2018 中,提出了 Async Generator functions 这一新特性,允许我们使用 async 和 await 来控制生成器函数的异步行为,这在某些场景...

    5 年前
  • npm 包 @babel/helper-plugin-utils 使用教程

    在编写 JavaScript 应用程序时,我们通常需要使用 Babel 来将 ES6 或更新版本的 JavaScript 代码转换为可在当前浏览器环境中运行的 JavaScript。

    5 年前
  • npm 包 @babel/helper-module-imports 使用教程

    在前端开发过程中,我们经常需要使用一些第三方库来帮助我们实现某些功能。而这些第三方库往往需要通过 import 或者 require 语句来引入到我们的项目中。在这个过程中,我们可能会遇到一些问题,如...

    5 年前
  • npm 包 nor-api-helpers 使用教程

    介绍 nor-api-helpers 是一个用于快速构建基于 NorJS API 的 Web 应用程序的 Node.js 模块。它提供了各种脚手架工具、组件和样式,可以大大提高开发效率,并提供了丰富的...

    5 年前
  • npm 包 nor-newrelic 使用教程

    前言 在前端开发的过程中,性能监控是一个非常重要的环节。而 NewRelic 正是一个业内比较出名的性能监控服务提供商。在前端开发中,我们通过 npm 包 nor-newrelic 来集成 NewRe...

    5 年前
  • npm 包 nor-ref 使用教程

    前言 在前端开发中,我们经常需要对对象进行深度复制或深度合并。如果直接使用 JavaScript 自带的赋值操作符,只会赋值对象的引用,而不是对象本身,这样在后续的操作中就容易导致对象间的互相干扰。

    5 年前

相关推荐

    暂无文章