Astro的Astrofy模板集成Twikoo评论系统

Astro的Astrofy模板集成Twikoo评论系统


NEW
astro twikoo

为什么使用twikoo

twikoo是我目前了解到的最方便的博客系统了,不需要特殊的网络环境登陆github,也不需要注册别的网站再去接入。

Astro集成方案

首先是需要安装twikoo的npm依赖

npm i twikoo

安装完依赖后,编写astro组件,我这里是叫 TwikooComment.astro

<!-- Twikoo comment -->
<div id="tcomment"></div>
<script>
    // 引入 twikoo
    import twikoo from "twikoo";
    // 引入 twikoo 的样式
    import "twikoo/dist/twikoo.css";
    function initTwikoo() {
        // 初始化twikoo
        twikoo({
            envId: "<your-twikoo-envId>",
            el: "#tcomment",
            lang: "zh-CN",
        }).then(() => {
            // 这里主要用来调试
            console.log("comment loading success");
        });
    }

    // 这里两个事件绑定很重要,有时候就是路由的时候无法加载twikoo
    document.addEventListener("astro:after-swap", () => initTwikoo(), {
        once: false,
    });
    document.addEventListener("astro:page-load", () => initTwikoo(), {
        once: false,
    });

    initTwikoo();
</script>

由于我这里用的是 Astrofy 模板,组件的使用方式很简单,直接在 layouts/PostLayout.astro 中引入并使用就可以了。比如:

---
// ...
import Comments from '../components/TwikooComment.astro';
// ...
---
<!-- ... -->
      <slot />
      <div class="divider my-2"></div>
      <!-- comment, powered by twikoo -->
      <Comments/>
    </article>
  </main>
</BaseLayout>

说明

上面的 astro:after-swapastro:page-load 这两个事件主要的作用就是为了防止路由切换的时候,评论不加载的问题。

这两个事件是 Astro 内置的视图切换(我这里理解为vue的路由)的生命周期事件,分别是:

  • before-swap:在新文档(在准备阶段填充)替换当前文档之前触发的事件。
  • page-load:在页面导航结束时触发的事件。

once 我理解为事件不是只触发一次。

具体的内容可以在 Astro视图切换生命周期事件 中找到。

分享这篇文章