App.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <h2>toRefs</h2>
  3. <!-- <h3>name: {{ state2.name }}</h3>
  4. <h3>age: {{ state2.age }}</h3> -->
  5. <h3>name: {{ name }}</h3>
  6. <h3>age: {{ age }}</h3>
  7. <h3>name2: {{ name2 }}</h3>
  8. <h3>age2: {{ age2 }}</h3>
  9. </template>
  10. <script lang="ts">
  11. import { defineComponent, reactive, toRef, toRefs } from "vue";
  12. function useFeature() {
  13. const state = reactive({
  14. name2: "xiaoming",
  15. age2: 18,
  16. });
  17. return {
  18. ...toRefs(state)
  19. }
  20. }
  21. export default defineComponent({
  22. //toRefs 把一个响应式对象转化成普通对象 该普通对象的每个 property都是一个ref
  23. setup() {
  24. const state = reactive({
  25. name: "xiaoming",
  26. age: 18,
  27. });
  28. const state2 = toRefs(state)
  29. console.log(state)
  30. console.log(state2)
  31. const { name, age } = toRefs(state);
  32. //解决: 利用toRefs可以将一个响应式reactive 对象的所有原始属性转化为ref属性
  33. //应用: 当从而成函数返回响应式对象时,可以在不丢失响应式的情况下对返回的对象进行分解使用
  34. const {name2,age2} = useFeature()
  35. setInterval(() => {
  36. // state.name += '='
  37. // state2.name.value += '!'
  38. name.value += "!!!!";
  39. name2.value += '!!!!'
  40. }, 2000);
  41. return {
  42. // ...state,
  43. // state2
  44. name,
  45. age,
  46. name2,
  47. age2
  48. };
  49. },
  50. });
  51. </script>
  52. <style scoped>
  53. </style>