使用uni-app自定义hooks时渲染模版时数据绑定异常小程序与web均无法响应式
使用uni-app自定义hooks时渲染模版时数据绑定异常小程序与web均无法响应式
项目信息
项目信息 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | windows |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.45 |
手机系统 | iOS |
手机系统版本号 | iOS 15 |
手机厂商 | 苹果 |
手机机型 | iPhone12 |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
hooks
import { ref } from "vue"
const useTest = () => {
const flag = ref(false)
const changeFlag = () => {
flag.value = !flag.value
}
return {
flag,
changeFlag
}
}
export default useTest
页面
<template>
<view class="content">
<view @click="onChange">改变flag状态</view>
<view>页面flag:{{pageFlag}}</view>
<view>页面flag表达式:{{pageFlag ? 'yes' : 'no'}}</view>
<view>hooks-flag:{{test.flag}}</view>
<view>hooks-flag表达式:{{test.flag ? 'yes' : 'no'}}</view>
</view>
</template>
<script setup>
import { ref } from "vue"
import useTest from '../../hooks/useTest';
const test = useTest()
const pageFlag = ref(false)
const onChange = () => {
test.changeFlag()
pageFlag.value = !pageFlag.value
}
</script>
<style>
.content{
text-align: center;
}
</style>
操作步骤:
点击’改变flag状态’文本即可
预期结果:
'hooks-flag表达式’的结果与’页面flag表达式’一致
实际结果:
'页面flag表达式’响应式变化
'hooks-flag表达式’无变化,无法响应式
bug描述:
使用自定义hooks时,在模版里面绑定表达式,则响应式失效,如果使用原值则响应式,查看是编译取值问题。
更多关于使用uni-app自定义hooks时渲染模版时数据绑定异常小程序与web均无法响应式的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
试试 const {flag, changeFlag}= useTest() 这样使用应该是可以的
更多关于使用uni-app自定义hooks时渲染模版时数据绑定异常小程序与web均无法响应式的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的响应式数据在模板中使用的问题。在uni-app的Vue3 setup语法中,当从hooks返回的ref对象在模板中使用时,如果直接使用test.flag
,实际上访问的是.value
的代理,但在模板表达式中会出现响应式丢失的情况。
解决方案很简单:在模板中使用hooks返回的ref时,需要显式调用.value
:
<view>hooks-flag:{{test.flag.value}}</view>
<view>hooks-flag表达式:{{test.flag.value ? 'yes' : 'no'}}</view>
或者更好的做法是在setup中解构出flag:
<script setup>
import useTest from '../../hooks/useTest';
const { flag, changeFlag } = useTest()
</script>
<template>
<view>{{flag ? 'yes' : 'no'}}</view>
</template>