readonly:

用于创建一个只读的数据, 并且是递归只读
递归只读:无论内层还是外层数据,都是只读,不可被更改的。

关于isReadeonly,以及readonly和const区别

  1. <template>
  2. <div>
  3. <p>{{state.name}}</p>
  4. <p>{{state.attr.age}}</p>
  5. <p>{{state.attr.height}}</p>
  6. <button @click="myFn">按钮</button>
  7. </div>
  8. </template>
  9. <script>
  10. /*
  11. 1.readonly
  12. - 只读数据
  13. 2.readonly和const
  14. - const 赋值保护
  15. - readonly 递归保护
  16. 3.isReadonly
  17. - 判断是否是readonly
  18. 4.shallowReadonly
  19. - 非递归保护
  20. * */
  21. import {readonly, isReadonly, shallowReadonly} from 'vue'
  22. export default {
  23. name: 'App',
  24. setup() {
  25. // readonly:用于创建一个只读的数据, 并且是递归只读
  26. let state = readonly({name:'lnj', attr:{age:18, height: 1.88}});
  27. // shallowReadonly: 用于创建一个只读的数据, 但是不是递归只读的
  28. // let state = shallowReadonly({name:'lnj', attr:{age:18, height: 1.88}});
  29. // const和readonly区别:
  30. // const: 赋值保护, 不能给变量重新赋值,
  31. // readonly: 属性保护, 不能给属性重新赋值
  32. // const value = 123;
  33. const value = {name:'zs', age:123};
  34. function myFn() {
  35. state.name = '知播渔';
  36. state.attr.age = 666;
  37. state.attr.height = 1.66;
  38. console.log(state);
  39. console.log(isReadonly(state)); //true
  40. // value = 456;
  41. // console.log(value);
  42. value.name = 'ls';
  43. value.age = 456;
  44. console.log(value);
  45. }
  46. return {state, myFn};
  47. }
  48. }
  49. </script>
  50. <style>
  51. </style>