如何正确使用Mixin

一:什么是Mixin?
  1.1 官方解释

混入(mixin)提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。
  1.2 自行理解:
      将组件的公共逻辑或者配置提取出来,哪个组件需要用到时,直接将提取的这部分混入到组件内部即可。这样既可以减少代码冗余度,也可以让后期维护起来更加容易。
      这里需要注意的是:提取的是逻辑或配置,而不是HTML代码和CSS代码。其实大家也可以换一种想法,mixin就是组件中的组件,Vue组件化让我们的代码复用性更高,那么组件与组件之间还有重复部分,我们使用Mixin在抽离一遍。

  1.3Mixin和Vuex的区别?
      上面一点说Mixin就是一个抽离公共部分的作用。在Vue中,Vuex状态管理似乎也是做的这一件事,它也是将组件之间可能共享的数据抽离出来。两者看似一样,实则还是有细微的区别,区别如下:

Vuex公共状态管理,如果在一个组件中更改了Vuex中的某个数据,那么其它所有引用了Vuex中该数据的组件也会跟着变化。
Mixin中的数据和方法都是独立的,组件之间使用后是互相不影响的。
二:Mixin的使用
  2.1 mixin定义
    src目录下新建mixin文件夹,然后新建index.js文件
        

 index.js完整代碼

export const mixins = {
  data() {
    return {
      msg: "我是Mixin中的msg",
    };
  },
  computed: {},
  created() {
    console.log("我是Mixin中的created生命周期函数");
  },
  mounted() {
    console.log("我是Mixin中的mounted生命周期函数");
  },
  methods: {
    clickMiXin() {
      console.log("我是Mixin中的点击事件");
    },
  },
};
  2.2 局部混入
index.vue文件引入代码

<template>
  <div>
    <el-button  @click="clickMiXin">测试</el-button>
  </div>
</template>
<script>
// 引入mixin
import { mixins } from "@/mixin/index";
export default {
  name: 'mixin-1',
  mixins: [mixins], //使用混入(mixin)
  created(){
    console.log("组件调用minxi数据",this.msg);
  },
  mounted(){
    console.log("我是组件的mounted生命周期函数")
  }
}
</script>
 效果如下:

通过代码和效果我们可以得出以下几点:

mixin中的生命周期函数会和组件的生命周期函数一起合并执行。
mixin中的data数据在组件中也可以使用。
mixin中的方法在组件内部可以直接调用。
生命周期函数合并后执行顺序:先执行mixin中的,后执行组件的。
注意:多组件引入mixin,一个组件改变了mixin中的数据另一个组件引入的mixin不受影响!!!

2.3 全局混入
修改main.js

import Vue from 'vue'
import App from './App.vue'
import ElementUI from 'element-ui';
import { mixins } from "@/mixin/index";
 
Vue.config.productionTip = false
Vue.mixin(mixins);
 
new Vue({
  render: h => h(App)
}).$mount("#app")
 index.vue中引入的mixin删掉

 
<template>
  <div>
    <el-button  @click="clickMiXin">测试</el-button>
  </div>
</template>
<script>
export default {
  name: 'mixin',
  created(){
    console.log("组件调用minxi数据",this.msg);
  },
  mounted(){
    console.log("我是组件的mounted生命周期函数")
  },
  methods: {
    
  }
}
</script>
效果如下:

 注意:混入也可以进行全局注册。使用时格外小心!一旦使用全局混入,它将影响每一个之后创建的 Vue 实例。使用恰当时,这可以用来为自定义选项注入处理逻辑。

三:选项合并
当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”。
比如,数据对象在内部会进行递归合并,并在发生冲突时以组件数据优先。
  3.1 生命周期函数冲突
确切来说,这种不算冲突,因为生命周期函数的名称都是固定的。
默认的合并策略如下,先执行mixin中生命周期函数中的代码,然后在执行组件内部的代码,上面的例子其实就很好的证明了。
  3.2 data数据冲突
    当mixin中的data数据与组件中的data数据冲突时,组件中的data数据会覆盖mixin中数据

//创建一个mixin
var mixin = {
  data: function () {
    return {
       msg: "我是Mixin中的msg",
    }
  }
}
 
new Vue({
  mixins: [mixin], //引入mixin
  data: function () {
    return {
      msg: '我是Index中的msg',
    }
  },
  created: function () {
    console.log(this.$data)
    // => { msg: "我是Index中的msg"}
  }
})
  可以看到最终打印的msg是组件中msg的值,其它没有冲突的数据自然合并了。

  3.3 方法冲突
  这种冲突很容易遇到,毕竟大家命名方法的名字很容易一样

//创建一个mixin
var mixin = {
  methods: {
    clickMiXin() {
      console.log("我是Mixin中的事件");
    },
  }
}
 
new Vue({
  mixins: [mixin], //引入mixin
  mounted(){
   this.clickMiXin();  // =>  "我是Index中的事件"
  },
  methods: {
     clickMiXin() {
       console.log("我是Index中的事件");
     },
  }
})
上段代码中mixin和组件中都有clickMiXin方法,但是最终在组件中调用时,实际调用的是组件中的clickMiXin方法。

四:mixin的优缺点
  4.1优点
提高代码复用性
无需传递状态
维护方便,只需要修改一个地方即可
  4.1缺点
命名冲突
滥用的话后期很难维护
不好追溯源,排查问题稍显麻烦
不能轻易的重复代码
总结:
      mixin给我们提供了方便的同时也给我们带来了灾难,所以有很多时候不建议滥用它,但是在有些场景下使用它又是非常合适的,这就得根据自己来取舍了。所以在很多时候我们需要考虑用公共组件还是使用mixin。

### 回答1: 使用Fabric Loader和Mixin实现重新注册Minecraft原版的方块需要遵循以下步骤: 1. 创建一个基于Fabric API的Mod,并在build.gradle中添加Mixin依赖。 2. 创建一个新的Mixin类来重新注册方块。这个Mixin类应该实现BlockAccessor接口,并覆盖getBlock()方法来返回重新注册的方块。 3. 在Mixin类中使用@Redirect注解来重定向原始方块的getMaterial()方法,并返回新的Material对象。 4. 在Mixin类中使用@ModifyVariable注解来修改原始方块的状态,并返回修改后的状态值。 5. 在Mixin类中使用@Inject注解来在原始方块的构造函数中注入新的值。 6. 在META-INF目录下创建一个新的mixins.modid.json文件,并在其中添加Mixin类的定义。 7. 将重新注册的方块作为资源文件添加到mod的资源路径中。 通过以上步骤,我们可以使用Fabric Loader和Mixin来重新注册Minecraft原版的方块。 ### 回答2: 在使用Fabric Loader和Mixin来重新注册Minecraft原版方块之前,我们首先需要安装和配置Fabric Loader和Mixin。 步骤如下: 1. 首先,确保已经正确地安装了Fabric Loader和Minecraft客户端。 2. 下载Mixin库的最新版本,并将相关的Mixin库文件放置在Minecraft客户端的mods目录中。 3. 创建一个新的Minecraft Mod项目,并在项目中包含Fabric Loader和Mixin库的相关依赖。 4. 在项目的src/main/resources目录下创建一个新的META-INF文件夹,并在其中创建一个新的Mixin配置文件,命名为mixins.modid.json,其中"modid"是你的Mod的标识符。 5. 在新创建的Mixin配置文件中,定义你要重新注册的原版方块的Mixin类和目标类。 6. 在Mixin类中,使用相关的Mixin注解来指定要修改的原版方块的行为和属性。你可以参考Mixin的官方文档来了解如何正确使用这些注解。 7. 在项目的build.gradle文件中,正确配置Fabric Loader和Mixin库的版本信息和依赖关系。 经过以上步骤的配置后,你的Mod就可以使用Mixin来重新注册Minecraft原版方块了。当游戏加载到你的Mod时,Mixin会自动将你的Mixin类应用到相应的目标类上,并修改方块的行为和属性。 需要注意的是,Mixin正确使用可能需要对Minecraft的源代码和Mixin库的工作原理有一定的了解。建议在开始使用之前,先阅读Mixin的官方文档,熟悉相关的概念和用法。此外,还需要确保你的Mixin类的命名和路径设置是正确的,以便Fabric Loader能够正确加载和应用Mixin。 在重新注册原版方块之后,你可以通过在Mixin类中重写相关的方法来修改方块的行为和属性。比如,你可以修改方块的纹理、硬度、发光等等。同时,你还可以在Mixin类中添加新的方法来为方块添加特定的功能和行为。 综上所述,通过使用Fabric Loader和Mixin来重新注册Minecraft原版方块,你可以灵活地修改和定制方块的行为和属性,为你的Mod带来更多的创意和乐趣。 ### 回答3: 要使用Fabric Loader的格式使用Mixin来重新注册Minecraft原版的方块,需要按照以下步骤进行操作: 1. 安装Fabric Loader:首先需要在Minecraft中安装Fabric Loader,因为Fabric Loader是一个轻量级模组加载器,可以帮助我们使用Mixin来修改Minecraft的原版内容。 2. 创建mod项目:使用Fabric官方提供的mod模板创建一个新的mod项目。在项目的build.gradle文件中添加Mixin的依赖,以便可以在项目中使用Mixin。 3. 创建Mixin类:在项目中创建一个新的Mixin类来修改原版方块的行为。Mixin是一种用于在不修改原版代码的情况下修改原版类的工具。在Mixin类中,你可以使用一些注解来实现对原版方块的重新注册。 4. 重新注册方块:在Mixin类中,使用@Inject注解来拦截原版方块的注册过程。然后在拦截方法中,可以通过一些调用来修改原版方块的注册行为,包括重新设置方块ID、方块材质、方块属性等。 5. 应用Mixin:在mod的main类中,使用@Entrypoint注解来将Mixin类与Minecraft的启动过程关联起来。在这个注解中,指定Mixin类所在的包路径。 6. 构建并运行mod:使用gradlew命令来构建你的mod项目,并将生成的mod文件放入到Minecraft的mods文件夹中。然后启动Minecraft游戏,确认mod已经正确加载并修改了原版方块的行为。 通过以上步骤,我们就可以使用Fabric Loader的格式,结合Mixin的功能,成功重新注册Minecraft原版的方块,实现我们自定义的方块行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值