Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
hello-uvue
提交
45709108
H
hello-uvue
项目概览
DCloud
/
hello-uvue
通知
402
Star
3
Fork
10
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hello-uvue
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
45709108
编写于
8月 26, 2024
作者:
DCloud-WZF
💬
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 组件生命周期补充 activated deactivated 示例及测试
上级
1e7ff753
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
113 addition
and
46 deletion
+113
-46
pages/lifecycle/component/ChildComponentComposition.uvue
pages/lifecycle/component/ChildComponentComposition.uvue
+11
-5
pages/lifecycle/component/ChildComponentOptions.uvue
pages/lifecycle/component/ChildComponentOptions.uvue
+10
-0
pages/lifecycle/component/component-composition.test.js
pages/lifecycle/component/component-composition.test.js
+24
-5
pages/lifecycle/component/component-composition.uvue
pages/lifecycle/component/component-composition.uvue
+11
-2
pages/lifecycle/component/component-options.test.js
pages/lifecycle/component/component-options.test.js
+45
-33
pages/lifecycle/component/component-options.uvue
pages/lifecycle/component/component-options.uvue
+12
-1
未找到文件。
pages/lifecycle/component/ChildComponentComposition.uvue
浏览文件 @
45709108
...
@@ -57,7 +57,7 @@ onUnload(() => {
...
@@ -57,7 +57,7 @@ onUnload(() => {
onBeforeMount(() => {
onBeforeMount(() => {
// 自动化测试
// 自动化测试
setLifeCycleNum(state.lifeCycleNum + 1)
setLifeCycleNum(state.lifeCycleNum + 1)
console.log('component for lifecycle test
mounted
')
console.log('component for lifecycle test
onBeforeMount
')
})
})
onMounted(() => {
onMounted(() => {
...
@@ -90,10 +90,16 @@ onUnmounted(() => {
...
@@ -90,10 +90,16 @@ onUnmounted(() => {
console.log('component for lifecycle test unmounted')
console.log('component for lifecycle test unmounted')
})
})
// TODO: app-android 不触发
onActivated(() => {
onActivated(() => { })
// 自动化测试
// TODO: app-android 不触发
setLifeCycleNum(state.lifeCycleNum + 1)
onDeactivated(() => { })
console.log('component for lifecycle test onActivated')
})
onDeactivated(() => {
// 自动化测试
setLifeCycleNum(state.lifeCycleNum - 1)
console.log('component for lifecycle test onDeactivated')
})
const updateTitle = () => {
const updateTitle = () => {
title.value = 'component for lifecycle test updated'
title.value = 'component for lifecycle test updated'
...
...
pages/lifecycle/component/ChildComponentOptions.uvue
浏览文件 @
45709108
...
@@ -54,6 +54,16 @@
...
@@ -54,6 +54,16 @@
setLifeCycleNum(state.lifeCycleNum - 1);
setLifeCycleNum(state.lifeCycleNum - 1);
console.log('component for lifecycle test unmounted');
console.log('component for lifecycle test unmounted');
},
},
activated() {
// 自动化测试
setLifeCycleNum(state.lifeCycleNum + 1);
console.log('component for lifecycle test activated');
},
deactivated() {
// 自动化测试
setLifeCycleNum(state.lifeCycleNum - 1);
console.log('component for lifecycle test deactivated');
},
methods: {
methods: {
updateTitle() {
updateTitle() {
this.title = 'component for lifecycle test updated';
this.title = 'component for lifecycle test updated';
...
...
pages/lifecycle/component/component-composition.test.js
浏览文件 @
45709108
...
@@ -4,6 +4,9 @@ const HOME_PATH = '/pages/index/index'
...
@@ -4,6 +4,9 @@ const HOME_PATH = '/pages/index/index'
describe
(
'
component-lifecycle
'
,
()
=>
{
describe
(
'
component-lifecycle
'
,
()
=>
{
let
page
let
page
let
lifeCycleNum
let
lifeCycleNum
const
platformInfo
=
process
.
env
.
uniTestPlatformInfo
.
toLocaleLowerCase
()
const
isAndroid
=
platformInfo
.
includes
(
'
android
'
)
const
isIos
=
platformInfo
.
includes
(
'
ios
'
)
beforeAll
(
async
()
=>
{
beforeAll
(
async
()
=>
{
page
=
await
program
.
reLaunch
(
HOME_PATH
)
page
=
await
program
.
reLaunch
(
HOME_PATH
)
await
page
.
waitFor
(
700
)
await
page
.
waitFor
(
700
)
...
@@ -22,9 +25,23 @@ describe('component-lifecycle', () => {
...
@@ -22,9 +25,23 @@ describe('component-lifecycle', () => {
expect
(
lifeCycleNum
).
toBe
(
resetLifecycleNum
)
expect
(
lifeCycleNum
).
toBe
(
resetLifecycleNum
)
})
})
it
(
'
onLoad onPageShow onReady onBeforeMount onMounted
'
,
async
()
=>
{
it
(
'
onLoad onPageShow onReady onBeforeMount onMounted onActivated
'
,
async
()
=>
{
lifeCycleNum
=
await
page
.
callMethod
(
'
pageGetLifeCycleNum
'
)
// TODO: android 组合式 API 不触发 onActivated
expect
(
lifeCycleNum
).
toBe
(
isAndroid
?
112
:
113
)
})
it
(
'
onDeactivated
'
,
async
()
=>
{
// TODO: android 组合式 API 不触发 onActivated onDeactivated
const
toggleAliveComponentBtn
=
await
page
.
$
(
'
#toggle-alive-component-btn
'
)
await
toggleAliveComponentBtn
.
tap
()
lifeCycleNum
=
await
page
.
callMethod
(
'
pageGetLifeCycleNum
'
)
lifeCycleNum
=
await
page
.
callMethod
(
'
pageGetLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
112
)
expect
(
lifeCycleNum
).
toBe
(
112
)
await
toggleAliveComponentBtn
.
tap
()
lifeCycleNum
=
await
page
.
callMethod
(
'
pageGetLifeCycleNum
'
)
// TODO: android 端 keep-alive 组件切换时,不触发 activated, 会触发 beforeUpdate updated
expect
(
lifeCycleNum
).
toBe
(
isAndroid
?
114
:
113
)
await
page
.
callMethod
(
'
pageSetLifeCycleNum
'
,
0
)
await
page
.
callMethod
(
'
pageSetLifeCycleNum
'
,
0
)
})
})
it
(
'
onBeforeUpdate onUpdated
'
,
async
()
=>
{
it
(
'
onBeforeUpdate onUpdated
'
,
async
()
=>
{
...
@@ -56,17 +73,19 @@ describe('component-lifecycle', () => {
...
@@ -56,17 +73,19 @@ describe('component-lifecycle', () => {
page
=
await
program
.
navigateTo
(
HOME_PATH
)
page
=
await
program
.
navigateTo
(
HOME_PATH
)
await
page
.
waitFor
(
'
view
'
)
await
page
.
waitFor
(
'
view
'
)
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
-
10
)
// TODO: ios 跳转页面, 未触发 keep-alive 组件 onDeactivated,返回未触发 onActivated
// TODO: android 跳转页面, 未触发 keep-alive 组件 onDeactivated,返回未触发 onActivated
expect
(
lifeCycleNum
).
toBe
(
isIos
||
isAndroid
?
-
10
:
-
11
)
page
=
await
program
.
navigateBack
()
page
=
await
program
.
navigateBack
()
await
page
.
waitFor
(
'
view
'
)
await
page
.
waitFor
(
'
view
'
)
lifeCycleNum
=
await
page
.
callMethod
(
'
pageGetLifeCycleNum
'
)
lifeCycleNum
=
await
page
.
callMethod
(
'
pageGetLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
0
)
expect
(
lifeCycleNum
).
toBe
(
0
)
await
page
.
callMethod
(
'
pageSetLifeCycleNum
'
,
0
)
})
})
it
(
'
beforeUnmount unmounted onUnload onBackPress
'
,
async
()
=>
{
it
(
'
onDeactivated
beforeUnmount unmounted onUnload onBackPress
'
,
async
()
=>
{
page
=
await
program
.
navigateBack
()
page
=
await
program
.
navigateBack
()
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
-
112
)
// TODO: android 组合式 API 不触发 onDeactivated
expect
(
lifeCycleNum
).
toBe
(
isAndroid
?
-
112
:
-
113
)
await
page
.
callMethod
(
'
setLifeCycleNum
'
,
0
)
await
page
.
callMethod
(
'
setLifeCycleNum
'
,
0
)
})
})
})
})
\ No newline at end of file
pages/lifecycle/component/component-composition.uvue
浏览文件 @
45709108
...
@@ -4,8 +4,11 @@
...
@@ -4,8 +4,11 @@
<!-- #endif -->
<!-- #endif -->
<view class="page container">
<view class="page container">
<text class="mb-10">component lifecycle 组合式 API</text>
<text class="mb-10">component lifecycle 组合式 API</text>
<child-component @updateIsScroll="updateIsScroll" />
<keep-alive>
<component :is="aliveComponent" @updateIsScroll="updateIsScroll" />
</keep-alive>
<button class="mt-10" @click="scrollToBottom">scrollToBottom</button>
<button class="mt-10" @click="scrollToBottom">scrollToBottom</button>
<button id="toggle-alive-component-btn" class="mt-10" @click="toggleAliveComponent">toggle alive component</button>
</view>
</view>
<!-- #ifdef APP -->
<!-- #ifdef APP -->
</scroll-view>
</scroll-view>
...
@@ -16,6 +19,8 @@
...
@@ -16,6 +19,8 @@
import ChildComponent from './ChildComponentComposition.uvue'
import ChildComponent from './ChildComponentComposition.uvue'
import { state, setLifeCycleNum } from '@/store/index.uts'
import { state, setLifeCycleNum } from '@/store/index.uts'
const aliveComponent = shallowRef<any | null>(ChildComponent)
const isScrolled = ref(false)
const isScrolled = ref(false)
// 自动化测试
// 自动化测试
...
@@ -24,7 +29,7 @@
...
@@ -24,7 +29,7 @@
}
}
// 自动化测试
// 自动化测试
const pageSetLifeCycleNum = (num : number) => {
const pageSetLifeCycleNum = (num : number) => {
setLifeCycleNum(num)
setLifeCycleNum(num)
}
}
...
@@ -44,6 +49,10 @@
...
@@ -44,6 +49,10 @@
scrollTop: 3000,
scrollTop: 3000,
})
})
}
}
const toggleAliveComponent = () => {
aliveComponent.value = aliveComponent.value == null ? ChildComponent : null
}
const updateIsScroll = (val : boolean) => {
const updateIsScroll = (val : boolean) => {
isScrolled.value = val
isScrolled.value = val
...
...
pages/lifecycle/component/component-options.test.js
浏览文件 @
45709108
...
@@ -2,39 +2,51 @@ const PAGE_PATH = '/pages/lifecycle/component/component-options'
...
@@ -2,39 +2,51 @@ const PAGE_PATH = '/pages/lifecycle/component/component-options'
const
HOME_PATH
=
'
/pages/index/index
'
const
HOME_PATH
=
'
/pages/index/index
'
describe
(
'
component-lifecycle
'
,
()
=>
{
describe
(
'
component-lifecycle
'
,
()
=>
{
let
page
let
page
let
lifeCycleNum
let
lifeCycleNum
beforeAll
(
async
()
=>
{
const
platformInfo
=
process
.
env
.
uniTestPlatformInfo
.
toLocaleLowerCase
()
page
=
await
program
.
reLaunch
(
HOME_PATH
)
const
isAndroid
=
platformInfo
.
includes
(
'
android
'
)
await
page
.
waitFor
(
700
)
beforeAll
(
async
()
=>
{
const
initLifecycleNum
=
0
page
=
await
program
.
reLaunch
(
HOME_PATH
)
await
page
.
callMethod
(
'
setLifeCycleNum
'
,
initLifecycleNum
)
await
page
.
waitFor
(
700
)
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
const
initLifecycleNum
=
0
expect
(
lifeCycleNum
).
toBe
(
initLifecycleNum
)
await
page
.
callMethod
(
'
setLifeCycleNum
'
,
initLifecycleNum
)
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
initLifecycleNum
)
page
=
await
program
.
navigateTo
(
PAGE_PATH
)
page
=
await
program
.
navigateTo
(
PAGE_PATH
)
await
page
.
waitFor
(
700
)
await
page
.
waitFor
(
700
)
})
})
afterAll
(
async
()
=>
{
afterAll
(
async
()
=>
{
const
resetLifecycleNum
=
1100
const
resetLifecycleNum
=
1100
await
page
.
callMethod
(
'
setLifeCycleNum
'
,
resetLifecycleNum
)
await
page
.
callMethod
(
'
setLifeCycleNum
'
,
resetLifecycleNum
)
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
resetLifecycleNum
)
expect
(
lifeCycleNum
).
toBe
(
resetLifecycleNum
)
})
})
it
(
'
beforeCreate created beforeMount mounted
'
,
async
()
=>
{
it
(
'
beforeCreate created beforeMount mounted activated
'
,
async
()
=>
{
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
4
)
expect
(
lifeCycleNum
).
toBe
(
5
)
})
})
it
(
'
beforeUpdate updated
'
,
async
()
=>
{
it
(
'
deactivated
'
,
async
()
=>
{
const
updateTitleBtn
=
await
page
.
$
(
'
.component-lifecycle-btn
'
)
const
toggleAliveComponentBtn
=
await
page
.
$
(
'
#toggle-alive-component-btn
'
)
await
updateTitleBtn
.
tap
()
await
toggleAliveComponentBtn
.
tap
()
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
6
)
expect
(
lifeCycleNum
).
toBe
(
4
)
})
// TODO: android 端 keep-alive 组件切换时,不仅触发 activated, 之前还会触发 beforeUpdate updated
it
(
'
beforeUnmount unmounted
'
,
async
()
=>
{
await
toggleAliveComponentBtn
.
tap
()
page
=
await
program
.
navigateBack
()
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
isAndroid
?
7
:
5
)
expect
(
lifeCycleNum
).
toBe
(
4
)
})
})
it
(
'
beforeUpdate updated
'
,
async
()
=>
{
const
updateTitleBtn
=
await
page
.
$
(
'
.component-lifecycle-btn
'
)
await
updateTitleBtn
.
tap
()
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
isAndroid
?
9
:
7
)
})
it
(
'
deactivated beforeUnmount unmounted
'
,
async
()
=>
{
page
=
await
program
.
navigateBack
()
lifeCycleNum
=
await
page
.
callMethod
(
'
getLifeCycleNum
'
)
expect
(
lifeCycleNum
).
toBe
(
isAndroid
?
6
:
4
)
})
})
})
\ No newline at end of file
pages/lifecycle/component/component-options.uvue
浏览文件 @
45709108
<template>
<template>
<view class="page">
<view class="page">
<text class="mb-10">component lifecycle 选项式 API</text>
<text class="mb-10">component lifecycle 选项式 API</text>
<child-component />
<keep-alive>
<component :is="aliveComponent" />
</keep-alive>
<button id="toggle-alive-component-btn" class="mt-10" @click="toggleAliveComponent">toggle alive component</button>
</view>
</view>
</template>
</template>
...
@@ -11,11 +14,19 @@ import { state } from '@/store/index.uts'
...
@@ -11,11 +14,19 @@ import { state } from '@/store/index.uts'
export default {
export default {
components: { ChildComponent },
components: { ChildComponent },
data(){
return {
aliveComponent: ChildComponent as any | null,
}
},
methods: {
methods: {
// 自动化测试
// 自动化测试
getLifeCycleNum(): number {
getLifeCycleNum(): number {
return state.lifeCycleNum
return state.lifeCycleNum
},
},
toggleAliveComponent(){
this.aliveComponent = this.aliveComponent == null ? ChildComponent : null
}
},
},
}
}
</script>
</script>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录