W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
以下為一個簡單示例:
// /components/index/index.js
Component({
mixins:[{ didMount() {}, }],
data: {y:2},
props:{x:1},
didUpdate(prevProps,prevData){},
didUnmount(){},
methods:{
onMyClick(ev){
my.alert({});
this.props.onXX({ ...ev, e2:1});
},
},
});
注意:onInit
、deriveDataFromProps
僅支持在基礎庫 1.14.0
版本及以上使用,可調用 my.canIUse('component2') 實現兼容,并且,需要在 IDE 中的 詳情 > 項目配置 中,勾選 component2。
參數 | 類型 | 是否必填 | 說明 | 最低版本 |
---|---|---|---|---|
data | Object | 否 | 組件內部狀態(tài) | - |
props | Object | 否 | 為外部傳入的數據設置默認值 | - |
onInit | Function | 否 | 組件生命周期函數,組件創(chuàng)建時觸發(fā) | 1.14.0 |
deriveDataFromProps | Function | 否 | 組件生命周期函數,組件創(chuàng)建時和更新前觸發(fā) | 1.14.0 |
didMount | Function | 否 | 組件生命周期函數,組件創(chuàng)建完畢時觸發(fā) | - |
didUpdate | Function | 否 | 組件生命周期函數,組件更新完畢時觸發(fā) | - |
didUnmount | Function | 否 | 組件生命周期函數,組件刪除時觸發(fā) | - |
mixins | Array | 否 | 組件間代碼復用機制 | - |
methods | Object | 否 | 組件的方法,可以是事件響應函數或任意的自定義方法 | - |
ref | Function | 否 | 指定組件被ref引用時的返回值 | 1.18.0 |
自定義組件不僅可以渲染靜態(tài)數據,也可以響應用戶點擊事件,進而處理并觸發(fā)自定義組件重新渲染。methods 中可以定義任意自定義方法。
注意: 與 Page 不同,自定義組件需要將事件處理函數定義在 methods 中。
<!-- /components/index/index.axml -->
<view>{{counter}}</view>
<button onTap="plusOne">+1</button>
// /components/index/index.js
Component({
data: { counter: 0 },
methods: {
plusOne(e) {
console.log(e);
this.setData({ counter: this.data.counter + 1 });
},
},
});
頁面會渲染一個按鈕,每次點擊它頁面的數字都會加 1。
自定義組件可以接受外界的輸入,做完處理之后,還可以通知外界說:我做完了。這些都可以通過 props 實現。
注意:
this.props
調用。// /components/index/index.js
Component({
data: { counter: 0 },
// 設置默認屬性
props: {
onCounterPlusOne: (data) => console.log(data),
extra: 'default extra',
},
methods: {
plusOne(e) {
console.log(e);
const counter = this.data.counter + 1;
this.setData({ counter });
this.props.onCounterPlusOne(counter); // axml中的事件只能由methods中的方法響應
},
},
});
以上代碼中 props 設置默認屬性,然后在事件處理函數中通過 this.props
獲取這些屬性。
<!-- /components/index/index.axml -->
<view>{{counter}}</view>
<view>extra: {{extra}}</view>
<button onTap="plusOne">+1</button>
<!-- /pages/index/index.axml -->
<my-component />
頁面輸出:
0
extra: default extra
+1
此時并未傳遞參數,所以頁面會顯示組件 js 中 props 設定的默認值。
注意: 外部使用自定義組件時,如果傳遞參數是函數,一定要以 on
為前綴,否則會將其處理為字符串。
// /pages/index/index.js
Page({
onCounterPlusOne(data) {
console.log(data);
},
});
<!-- /pages/index/index.axml -->
<my-component extra="external extra" onCounterPlusOne="onCounterPlusOne" />
頁面輸出:
0
extra: external extra
+1
此時傳遞了參數,所以頁面會顯示外部傳遞的 extra 值 external extra
。
屬性名 | 類型 | 說明 |
---|---|---|
data | Object | 組件內部數據 |
props | Object | 傳入組件的屬性 |
is | String | 組件路徑 |
$page | Object | 組件所屬頁面實例 |
$id | Number | 組件 id,可直接在組件 axml 中渲染值 |
以下為一個簡單示例:
// /components/index/index.js
Component({
didMount(){
this.$page.xxCom = this; // 通過此操作可以將組件實例掛載到所屬頁面實例上
console.log(this.is);
console.log(this.$page);
console.log(this.$id);
}
});
<!-- /components/index/index.axml 組件 id 可直接在組件 axml 中渲染值 -->
<view>{{$id}}</view>
// /pages/index/index.js
Page({
onReady() {
console.log(this.xxCom); // 可以訪問當前頁面所掛載的組件
},
});
當組件在頁面上渲染后,執(zhí)行 didMount 回調,控制臺輸出如下:
/components/index/index
{$viewId: 51, route: "pages/index/index"}
1
方法名 | 參數類型 | 說明 |
---|---|---|
setData | Object | 設置 data 觸發(fā)視圖渲染 |
$spliceData | Object | 設置 data 觸發(fā)視圖渲染 |
具體使用方式同 頁面。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: