vue组件如何抽离公众逻辑

  • 多个组件有相同的逻辑,抽离出来
  • mixin并不是完美的解决方案,会有一些问题
  • Vue3 提出的 Composition API 旨在解决这些问题

演示

新建一个 mixin 文件

  1. /* myMixin.js */
  2. export default {
  3. data () {
  4. return {
  5. city: "beijing"
  6. }
  7. },
  8. methods: {
  9. showName() {
  10. console.log(this.name)
  11. }
  12. },
  13. mounted() {
  14. console.log('mixin mounted', this.name)
  15. }
  16. }

调用myMixin文件的页面

  1. <template>
  2. <div>
  3. <p>{{name}} {{major}} {{city}}</p>
  4. <button @click="showName">显示姓名</button>
  5. </div>
  6. </template>
  7. <script>
  8. import mixin from '@/mymMixin.js'
  9. export default {
  10. mixins: [mixin], // [mixin1, mixin2, mixin3] 多个的情况
  11. data () {
  12. return {
  13. name: 'zwx',
  14. major: 'web'
  15. }
  16. },
  17. mounted () {
  18. console.log('component mounted', this.name)
  19. }
  20. }
  21. </script>

截屏2020-10-17 下午4.52.04.png
父页面中可以调取mixin文件里面的数据,mixin文件也可以调取父页面中的数据。这也导致了mixin变量来源不明确,不利于阅读且容易命名冲突与且如果多对多,复杂度较高

mixin的问题

  • 变量来源不明确,不利于阅读
  • 多mixin可能会造成命名冲突
  • mixin和组件可能出现多对多的关系,复杂度较高