npm 包 static-router 使用教程

阅读时长 9 分钟读完

引言

在前端开发中,我们经常需要使用路由管理页面的跳转和状态等,通常我们会使用框架提供的路由功能,比如 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