本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
vue3.0 的 Composition API 的一种使用方法
manongba · 230浏览 · 发布于2020-10-26 +关注

网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛。

假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面,事件都放在methods 里面,代码少的话还好分辨,如果代码多了,看着就头疼了。
现在vue3.0可以按照业务关系分成多个管理类来管理这些代码。

比如帖子列表+发帖功能,我们先做一个模板:
(简单表示一下,不做美化处理了)

<template>
  <div>
      论坛列表      <div v-for="(item, index) in articleList" :key="'articleList' + index">
        {{index}}:{{item.title}}
        {{item.viewCount}}      </div>
      <div><!--分页-->
        <a-pagination v-model:current="acticleCurrent" :total="50" show-less-items />
      </div>
  </div>
  <div style="width:400px">
      发个帖子
      标题:<a-input v-model:value="articleForm.title"/>
      内容:<a-input v-model:value="articleForm.content"/>
      <a-button type="dashed" @click="sendArticle" >发表帖子</a-button>
  </div></template>

上面的模板部分没有啥区别,变化部分在js代码。
我们可以先写一个帖子列表的管理类,包含帖子列表的数据,和依据页号加载数据的方法。

代码如下:

// 帖子列表的管理类const manageArticleList = () => {  const articleList = ref([
    {      title: '这是帖子',      viewCount: 100,      sendTime: '2020-10-20'
    }
  ])  // 依据页号加载帖子列表
  const loagActicleListByPage = (pageIndex) => {    // alert(pageIndex)
    articleList.value = [
      {        title: '这是新加载的帖子帖子',        viewCount: 100 + parseInt(pageIndex),        sendTime: '2020-10-20'
      }
    ]
  }  return {
    articleList,
    loagActicleListByPage
  }
}

再写一个分页的管理类(使用antdv的a-pagination),代码如下

// 分页管理类const manageActiclePage = () => {  const acticleCurrent = ref(0)  return {
    acticleCurrent
  }
}

最后我们可以在setup里面把这两个管理类给结合起来,一起返回给view。

export default {
  setup () {    // 引入查询管理
    const { articleList, loagActicleListByPage } = manageArticleList()    // 引入分页管理
    const { acticleCurrent } = manageActiclePage() 
    // 监听页号变化,加载数据
    watch(acticleCurrent, (newValue, oldValue) => {
      loagActicleListByPage(newValue)
    })    // 返回给view
    return {
      articleList,
      acticleCurrent,
    }
  }
}

在setup里面,监听 acticleCurrent 页号变化,调用 manageArticleList 的 loagActicleListByPage 事件,加载数据。
当然也可以有其他的组合方式,这里只是举个简单的例子。

这样代码可以根据业务逻辑分散开,便于扩展和维护,比如我们要加一个查询功能,那么可以在 manageArticleList 里面加个 loagActicleListByQuery 的事件。

最后的效果就是,代码依据业务逻辑,完全分散成多个管理类,setup只需要负责加载和整合即可,setup里面也不会有很多代码。

管理类应该可以写在单独的js文件里面,比如我们把表单的js代码写在单独的js文件里面:(bbs-manageArticleForm.js)

import { ref } from 'vue'// 帖子列表的管理类export function manageArticleForm () {  const modelForm = ref(
    {      title: '这是帖子标题',      content: '帖子内容',      sendTime: '2020-10-20'
    }
  )  // 依据页号加载帖子列表
  const sendArticle = () => {    // 调用axios 向后端提交
    alert('假装发表成功了。。。')
  }  return {    articleForm: modelForm,
    sendArticle
  }
}

然后在views里面用import引入

import { manageArticleForm } from './bbs-manageArticleForm.js'

在setup里面设置如下:

setup() {
    ......    // 表单
    const { articleForm, sendArticle } = manageArticleForm()    // 返回给view
    return {
      ......
      articleForm,
      sendArticle,
      ......
    }
}

写在单独的js文件里面,意味着可以复用。不仅这里可以用,其他的地方也可以直接拿过来用。好吧,这个表单基本没啥可以好复用的,这里只是举个例子。


相关推荐

RN开发环境的npm私库本地debug调试

manongba · 688浏览 · 2019-05-09 17:03:46
你不知道的浏览器渲染原理

追忆似水年华 · 1362浏览 · 2019-05-09 22:47:56
基于iview的router常用控制方式

追忆似水年华 · 980浏览 · 2019-06-03 10:39:21
编程小知识之 JavaScript 文件读取

manongba · 708浏览 · 2019-06-10 09:16:16
10个省时间的 PyCharm 技巧 赶快收藏!

· 691浏览 · 2019-06-10 09:32:01
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页