尝试根据值设置不同的数组。错误:组件渲染函数中可能存在无限更新循环

Posted

技术标签:

【中文标题】尝试根据值设置不同的数组。错误:组件渲染函数中可能存在无限更新循环【英文标题】:Trying to set different arrays depending on value. Error: You may have an infinite update loop in a component render function 【发布时间】:2020-02-17 19:09:55 【问题描述】:

我正在尝试根据另一个值将此数组设置为不同的东西并得到错误

[Vue 警告]:组件渲染函数中可能存在无限更新循环。

我在 vue 的 data() 中将数组设置为空,

ranktexts: [],

然后在我使用此代码的方法中

texts(rank) 
    if (rank === 3) 
        this.ranktexts = ['Mal', 'Indiferente', 'Bueno'];
     else if (rank === 4) 
        this.ranktexts = ['Mal', 'Indiferente', 'Bueno', 'Excelente'];
     else if (rank === 5) 
        this.ranktexts = ['Muy Mal', 'Mal', 'Indiferente', 'Bueno', 'Excelente'];
     else 
        this.ranktexts = ['Muy Mal', 'Mal', 'Indiferente', 'Bueno', 'Muy Bueno', 'Excelente'];
    
,

这就是我所说的

<div class="question_reply" v-if="form.response_type_id === 3">
    <el-form-item>
        <el-rate v-model="value"
            :max="form.rank"
            :texts="texts(form.rank)"
            show-text
            allow-half
        ></el-rate>
    </el-form-item>

【问题讨论】:

【参考方案1】:

是的!您的组件将被无限重新渲染。

渲染时,:texts="texts(form.rank)" 得到结果你用参数调用了一个方法。

在该方法中,您更新了数据中的ranktexts。更新ranktexts 将使组件重新渲染。

所以再次渲染。

render -> texts(form.rank) -> 更新 ranktexts -> 渲染

解决这个问题。我认为没有必要使用ranktexts

只返回数组。

texts(rank) 
    if (rank === 3) 
       return ['Mal', 'Indiferente', 'Bueno'];
    
    if (rank === 4) 
       return ['Mal', 'Indiferente', 'Bueno', 'Excelente'];
    
    if (rank === 5) 
       return ['Muy Mal', 'Mal', 'Indiferente', 'Bueno', 'Excelente'];
    
    return ['Muy Mal', 'Mal', 'Indiferente', 'Bueno', 'Muy Bueno', 'Excelente'];

【讨论】:

@Nancy 你发送了像show-text="true" 这样的道具吗?如果然后只需添加: 就像:show-text="true"。如果没有,请在您的问题中提供更多代码,以便我为您提供帮助。 嗨,我想通了,作为回报,我在做return 'true' 而不是return true,谢谢

以上是关于尝试根据值设置不同的数组。错误:组件渲染函数中可能存在无限更新循环的主要内容,如果未能解决你的问题,请参考以下文章

React:组件和数组的条件渲染

vue实现页面权限中的菜单配置

即使调用了渲染函数中的 console.log,组件也不会在状态更改时重新渲染

Vue中props传递参数

条件对象作为数组值

ngFor正在根据可观察变量的变化重新渲染内容