1***@qq.com
1***@qq.com
  • 发布:2022-10-22 11:00
  • 更新:2022-10-22 11:53
  • 阅读:230

组件中使用wxs,该组件渲染多个时,wxs会冲突,内部变量会相互污染

分类:uni-app
  • 在组件中使用wxs实现动画,该组件只创建一个时,是正常的,但在同一个页面创建多个该组件时,动画异常
  • 运行平台为H5 和 安卓app端
  • 经过测试,发现是变量污染的问题,就是组件wxs内部变量会影响到其它组件内部的wxs变量
  • 请问这是bug?还是设计?有什么解决办法吗
2022-10-22 11:00 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com (作者)

  • 下面是示例代码,将代码封装成一个组件,在页面上创建2个组件,点击第一个组件的更改,结果如下:
    • js变量改变前 hello world
    • js变量改变后 hello bug
    • wxs变量改变前 hello world
    • wxs变量改变后 hello bug
  • 此时第一个组件结果是正常的,然后点击第二个组件的更改,结果如下
    • js变量改变前 hello world
    • js变量改变后 hello bug
    • wxs变量改变前 hello bug
    • wxs变量改变后 hello bug
  • 此时第二个组件结果异常,wxs内部的变量提前更改了
<template>  
    <view class="yb-test" :prop="testprop"  :change:prop="testwxs.propWatcher">  
        <button @tap="changeText">更改</button>  
    </view>  
</template>  
<script>  
    export default {  
        data () {  
            return {  
                text: 'hello world'  
            }  
        },  
        computed: {  
            testprop () {  
                return {  
                    text: this.text  
                }  
            }  
        },  
        methods: {  
            changeText () {  
                console.log('js变量改变前', this.text);  
                this.text = 'hello bug'  
                console.log('js变量改变后', this.text);  
            }  
        }  
    }  
</script>  
<script module="testwxs" lang="wxs">  
    var text = 'hello world'  
    function propWatcher (newVal) {  
        console.log('wxs变量改变前',text);  
        text = newVal.text  
        console.log('wxs变量改变后',text);  
    }  
    module.exports = {  
        msg: text,  
        propWatcher: propWatcher  
    }  
</script>
1***@qq.com

1***@qq.com (作者)

  • 问题已解决,使用ins.getState()来存储变量

该问题目前已经被锁定, 无法添加新回复