前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

setHook

作者头像
copy_left
发布2020-04-09 11:46:25
2840
发布2020-04-09 11:46:25
举报
文章被收录于专栏:方球
利用 setHook 实现简单的 tag 选择

name-tag.gif

代码语言:javascript
复制
<template>
  <div class="home">

    <div>
      <Card style='margin: 20% auto; width: 600px' title='Name Tag'>
        
        <div slot="extra" style="display: flex; align-items: center">
          <Button @click='reset' > reset </Button>
        </div>

        <div style='margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px solid #eee'>
          <Tag v-for='item of set' :key='item.name' closable @on-close="remove(item)" >  {{ item.name }} - {{ item.age }} </Tag>
        </div>

        <div> 
          <template  v-for='item of users'>
            <Button 
            style='margin-right: 8px' 
            icon="ios-add" 
            type="dashed" 
            size="small" 
            @click="add(item)" 
            v-if='!set.has(item)' 
            :key='item.name'> 
              {{ item.name }}
            </Button>
          </template>
        </div>

      </Card>
    </div>
    
  </div>
</template>

<script>
import setHook from '@/hooks/setHook'


export default {

  setup(){

    const users = [
      
      {
        name: 'Coco',
        age: 24
      },
      {
        name: 'Jeck',
        age: 25
      },
      {
        name: 'Rogen'
      }

    ]

    const [ set, utils ] = setHook([ { name: 'copy', age: 34 } ])


    return {
      users,
      set,
      ...utils
    }

  }

}
</script>
hook 实现
代码语言:javascript
复制
import { ref } from '@vue/composition-api'


/**
 * Set hooks
 * @param { Array } initVal 初始数据
 * @summary 对Set类型做的hook封装,利用Set的幂等性
 * @exports 
 * const [ set, utils ] = setHook([ 1, 2 ])
 * 
 * 添加
 * set.add(3) ==> [1, 2, 3]
 * set.add(2) ==> [1, 2, 3]
 * 
 * 移除
 * set.remove(1) ==> [2, 3]
 * 
 * 重置
 * set.reset()  ==> [1, 2]
 * 
 * 
 * 其他Set方法
 * 
 * 校验
 * set.value.has(1) ==> true
 * 
 * 遍历
 * const newList = [...set.value].map(num => num + 1)  ==> [ 2, 3 ]
 * 
 */
export default function setHook(initVal=[]){

    const initSet = ref(new Set(initVal))
    const set = ref(new Set(initVal))
    
    const add = key => set.value = new Set([...[...set.value], key])
    const remove = key => set.value = new Set([...set.value].filter(i => i !== key))
    const reset = () => set.value = new Set([...initSet.value])
    const setInit = initVal => initSet.value = new Set(initVal)

    return [ set, {  add, remove, reset, setInit } ]
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 利用 setHook 实现简单的 tag 选择
  • hook 实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档