vue3基础用法总结(第一期,文章底部有源码)

401 阅读2分钟

1、ref的用法

我这边使用的是setup方式

<script lang="ts" setup>
    // 步骤一,首先先引入ref
    import { ref, computed, onMounted, reactive } from "vue";
    // 然后再使用ref,ref是个函数。可以传一个string,number,boolean等
    const viewVersionVisible = ref(false);
</script>

因为ref定义出来就是个响应式数据所以我们在template中用的时候,可以直接像使用vue2 data中数据那样的方式来使用,比如以下实例

 <EditDialog
      v-if="viewVersionVisible"
    />

ref在script中也就是在js中使用的时候,与在template会有所不同,因为ref的返回值中的value才是真正的响应式数据,比如我们想要改上面的viewVersionVisible为true,则可以使用下面的方式。

// 数据编辑
const handleEdit = (row: any, index: number) => {
  viewVersionVisible.value = true;
};

2、reactives 的使用方式

import { reactive} from "vue";
const reactives = reactive({
  formData: {
    label_id: null
  },
  name:'张三'
});
​

3、props的使用方式

因为我是在set环境下使用的props ,所以可以直接使用

<script lang="ts" setup>
    const props = defineProps({
      value: Boolean,
      editMode: String,
      editData: Object,
    });
    // props是一个对象 使用的时候如下:
    console.log(props.value)
</script>

假如我们在ts中使用props,并且想要给props设置默认值,则可以这样写

/**
 * Props - vue3写法
 */
interface Props {
  searchColumns: FilterColumns[];
  columns: ElTableColumn[];
  action: Function;
  crudMethod: any;
  deafultSearch: any;
}
// 字段// 使用此方式声明的Pros有默认值
const props = withDefaults(defineProps<Props>(), {
  searchColumns: () => [],
  columns: () => [],
  crudMethod: {
    isAdd: true,
    isEdit: true,
    isDel: true,
  },
  // 接口方法 promise
  action: () => {
    return () => { };
  },
  deafultSearch: () => { }
});
const { columns, action } = props;

4、emit的用法。

在vue2中我们都知道emit的用法是子组件向父组件传递参数用的,那么在vue3的setup中能直接用吗?

// 在vue3中使用emit说先要先引入
import { defineEmits } from "vue";
// 然后再生命要使用的emits
const emits = defineEmits(["update:modelValue", "refresh"]);
// 这样我们再scritp中就可以用了// 这个是我们定义的一个事件,然后通过事件执行emit
const onClose = () => {
  emits("update:modelValue", false);
};

5、在vue3中使用onMounted 生命周期函数,首先也是要先引用的

import { onMounted} from "vue";
onMounted(() => {
  const { editMode, editData } = props;
});

6、函数或者方法在vue3中的使用

<script lang="ts" setup> 
    // 比如我要定义一个add方法,可以直接这样写
    const add = () => {
        console.log('add')
    }
    // 非常的方便, 再比如我要在另一个方法中调用add方法
    const edit= () => {
        add()
    }
</script> 

7、computed 的使用

<script lang="ts" setup> 
    import { computed } from 'vue'
    const plusOne = computed(() => count.value + 1)
    console.log(plusOne.value) // 2
</script>

8、关于v-model的用法,假如自己要封装一个组件使用v-model

在组件中vue2的写法一般是用prop中value接收,并使用emit('input')出去

那么在vue3中的使用方法呢?

比如我封装了一个上传组件,使用方式是这样的

       <ImageUpload v-model="image" />

那么我在组件内部又做了什么事情呢?

const emits = defineEmits(['update:modelValue'])
// 1、接收值
interface Props {
    modelValue: any
}
​
const props = withDefaults(defineProps<Props>(), {
    modelValue: {},
})
// 2、上传成功钩子
const handlesSuccess = (val: any) => {
    emits('update:modelValue', val.data) // 这个很关键
}

9、本期不介绍原理,只介绍如何使用vue3

源码:gitee.com/git-wyh/vue…