mixins是Extjs4的新特性,直译就是“混入”,可以复用一些公共逻辑的代码,从而减少代码量。
mixin在javascript里可以看作是一种从别的对象"借用"功能的方法。每一个新定义的对象都有一个 prototype属性,其他的对象就可以从这里"借用"功能。这里的功能可以是一个属性,也可以是一个方法。——
本质上类似于import一个js类,生命周期初始化顺序为 page(onLoad)—> mixins(onInit) —> components(onInit)
与组件的js类似,拥有data
、onInit
和deriveDataFromProps
等生命周期、method
等。基本上就可以当成component来用啦!
// mixinTest.js
export default {
data: {
mixinData: 'mixinData',
counter: 3
},
onInit(){
console.log('init');
},
deriveDataFromProps(nextProps){},
didMount(){},
didUpdate(prevProps,prevData){},
didUnmount(){},
methods: {
onTapHandler() {
const {counter} = this.data;
this.setData({
counter: 1 + counter
})
console.log('onTapHandler', this.data.counter);
},
},
};
// testComponent.js
import mixinTest from '../mixinTest/mixinTest';
const initialState = {
data: {
isLogin: false,
componentCounter: 0
},
};
const defaultProps = {
props: {
age: 30,
},
};
Component({
mixins: [
mixinTest,
initialState,
defaultProps,
// methods
],
data: {
name: 'alipay'
},
props: {},
onInit() {
console.log('component init')
},
methods: {
componentTap () {
const {counter, componentCounter} = this.data;
const {counter:mixinCounter} = mixinTest.data;
console.log(counter + 1, mixinCounter, componentCounter + 1);
this.setData({
counter: counter + 1,
componentCounter: componentCounter + 1
})
}
},
});
<!-- testComponent -->
<view>
<test-component2 />
{{name}}: {{age}}:counter:{{counter}}
<view onTap="onTapHandler" style="width:100vw;height:40rpx;background:royalblue;">tap place</view>
<view onTap="componentTap" style="width:100vw;height:40rpx;background:rosybrown;">component place</view>
</view>
其他js就是在onInit和onLoad里加入了console.log,界面如下
因篇幅问题不能全部显示,请点此查看更多更全内容