无法获取到datas的长度

为什么我无法获取到datas的长度?

materialdata里的数据为 : [{"material_id":"of6","material_name":"西米","status":0},{"material_id":"rVr","material_name":"寒天晶球","status":0}]



```javascript
var res=[]
try {
            res = await mysql.query("select materialdata from group_tea_relations where tea_id=?",[teaIds[i].tea_id])
        } catch(e) {
            console.error(e)
        }
        var datas=[]
        datas=JSON.parse(res[0].materialdata)
        console.log(datas.length)        
        for(let g=0;g<datas.length;g++){
  
                     datas[g].status=0
       
         }

```

你看下你的 datas 获取出来是啥, F12 控制台输出看下

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/324837
  • 这篇博客也不错, 你可以看下使用data-的好处
  • 除此之外, 这篇博客: 为何组件的data必须是一个函数中的 二、组件data定义函数与对象的区别 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这里我们模仿组件构造函数,定义data属性,采用对象的形式

    function Component(){
     
    }
    Component.prototype.data = {
     count : 0
    }
    

    创建两个组件实例:

    const componentA = new Component()
    const componentB = new Component()
    

    修改componentA组件data属性的值,componentB中的值也发生了改变

    console.log(componentB.data.count)  // 0
    componentA.data.count = 1
    console.log(componentB.data.count)  // 1
    

     原因是者两个共用了同一个内存地址,如果我们采用函数的形式则不会出现这种情况

    function Component(){
     this.data = this.data()
    }
    Component.prototype.data = function (){
        return {
         count : 0
        }
    }
    

    修改componentA组件data属性的值,componentB中的值不受影响 

    console.log(componentB.data.count)  // 0
    componentA.data.count = 1
    console.log(componentB.data.count)  // 0
    
    • 以下回答由chatgpt基于相关博客总结生成:

      根据参考资料,可以得出以下结论:

      1. 在Vue中,组件中的data属性必须以函数的方式定义,而不是对象。这是因为如果data是一个对象的话,多个组件将会共享同一个数据,当其中一个组件对数据做出改变时,会影响其他组件上的数据。而如果data是一个函数的话,每次调用data都会返回一个新的数据对象,避免了数据的共享和影响。

      2. 如果在组件内部无法获取到datas的长度,可能是由于以下原因:

      3. datas并未正确初始化或赋值,导致其为undefined或null。
      4. datas是一个异步获取的数据,而在获取数据之前就尝试获取其长度。
      5. datas是一个空数组,没有任何元素。

      6. 获取数组datas的长度有以下方法:

      7. 使用length属性来获取数组的长度。如:datas.length
      8. 使用Array.isArray()函数判断datas是否为数组,然后使用length属性来获取长度。如: if (Array.isArray(datas)) { const length = datas.length; // do something with the length }
      9. 使用循环遍历数组,并计数。如: let count = 0; for (let i = 0; i < datas.length; i++) { count++; } // use the count variable
      10. 使用forEach方法来遍历数组,并计数。如: let count = 0; datas.forEach(item => { count++; }); // use the count variable

      11. 如果以上方法都无法获取到数组datas的长度,可能是由于所使用的数据不是一个数组或者数据还未被正确初始化。在使用上述方法之前,确保datas是一个有效的数组,并在获取数据之前进行必要的数据初始化。如果问题仍然存在,可能需要检查代码逻辑或者其他相关代码。

      综上所述,根据参考资料和现有知识,以上是可能导致无法获取到数组datas长度的原因和解决方案。如果以上解决方案均无效,可能需要进一步检查代码或提供更多相关信息来解决问题。

确定返回的res里边有数据么?输出一下看是什么
console.log(res);