返回

从0开始构建《掘金特别关注》谷歌插件,五千字细说Vue3响应式原理

前端

引言

在本期酱酱的下午茶中,我们将从头开始构建一个 Chrome 插件——《掘金特别关注》。该插件将允许用户在掘金网站上快速访问他们关注的作者和话题。我们将使用 Vue.js 来构建这个插件,并深入探讨 Vue3 中响应式原理的实现。此外,我们还将讨论几种缓存读写方案的优缺点和选择。

手把手构建掘金特别关注插件

1. 创建项目

首先,我们需要创建一个新的 Chrome 插件项目。我们可以使用 Yeoman 来生成一个脚手架项目:

npm install -g yo generator-chrome-extension
yo chrome-extension

2. 添加依赖项

接下来,我们需要安装一些依赖项:

npm install vue vue-router vuex axios

3. 编写代码

现在,我们可以开始编写代码了。首先,我们需要创建一个 Vue 实例:

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})

接下来,我们需要定义路由:

const router = new VueRouter({
  routes: [
    {
      path: '/',
      component: Home
    },
    {
      path: '/authors',
      component: Authors
    },
    {
      path: '/topics',
      component: Topics
    }
  ]
})

最后,我们需要定义存储:

const store = new Vuex.Store({
  state: {
    authors: [],
    topics: []
  },
  getters: {
    getAuthors: state => state.authors,
    getTopics: state => state.topics
  },
  mutations: {
    setAuthors: (state, authors) => {
      state.authors = authors
    },
    setTopics: (state, topics) => {
      state.topics = topics
    }
  },
  actions: {
    fetchAuthors: ({ commit }) => {
      axios.get('https://掘金.com/api/authors')
        .then(response => {
          commit('setAuthors', response.data)
        })
        .catch(error => {
          console.log(error)
        })
    },
    fetchTopics: ({ commit }) => {
      axios.get('https://掘金.com/api/topics')
        .then(response => {
          commit('setTopics', response.data)
        })
        .catch(error => {
          console.log(error)
        })
    }
  }
})

4. 构建插件

现在,我们可以构建插件了:

npm run build

5. 安装插件

最后,我们可以安装插件了:

chrome://extensions/

Vue3 响应式原理

1. 响应式系统

Vue3 的响应式系统是基于 Proxy 实现的。Proxy 是一种 JavaScript API,允许我们对对象的属性进行拦截。当对象的属性发生变化时,Proxy 会触发一个事件。Vue3 利用这个事件来更新视图。

2. reactive()

reactive() 函数可以将一个普通对象转换为一个响应式对象。当响应式对象的属性发生变化时,Vue3 会自动更新视图。

3. watch()

watch() 函数可以监视一个响应式对象的属性。当该属性发生变化时,watch() 函数会执行一个回调函数。

几种缓存读写方案的优缺点和选择

1. 内存缓存

内存缓存是一种将数据存储在计算机内存中的缓存方式。内存缓存的速度很快,但容量有限。

2. 磁盘缓存

磁盘缓存是一种将数据存储在硬盘中的缓存方式。磁盘缓存的速度比内存缓存慢,但容量更大。

3. 数据库缓存

数据库缓存是一种将数据存储在数据库中的缓存方式。数据库缓存的速度比磁盘缓存慢,但容量更大。

4. 如何选择

在选择缓存方案时,我们需要考虑以下因素:

  • 缓存的数据量
  • 缓存的数据的访问频率
  • 缓存的成本