使用 "v-if" 指令时,控制台出现错误。无限循环

I get error in console when use "v-if" directive. Infinite loop

当我使用 v-if 后,我的控制台出现 [Vue warn],不知道如何解决这个问题。 [Vue warn]: 你可能在组件渲染函数中有一个无限更新循环。

<template>
  <div class="example-component">
      <div class="spinner-box" v-if="loadComplete = !loadComplete">
        <div class="spinner-inner">
          <i class="fas fa-circle-notch fa-spin"></i>
        </div>
      </div>
  </div>
</template>

<script>
export default {
  name: 'ExampleComponent',
  data () {
    return {
      loadComplete: false
    }
  }
</script>

改变

v-if="loadComplete = !loadComplete"

v-if="!loadComplete"

例子

https://2ozkjp4vyp.codesandbox.io/

<template>
    <div id="app">
        <img width=200 src="./assets/logo.png">
        <div class="loader" v-if="!loadComplete"></div>
        <div v-else>
            <p>asynchronous data from firebase</p>
            <button @click="loadDataFromFirebase">Reload</button>
        </div>
    </div>
</template>

<script>
    export default {
    name: 'app',
        data: () => ({
            loadComplete: false
        }),
        mounted () {
            this.loadDataFromFirebase()
        },
        methods: {
            loadDataFromFirebase () {
                this.loadComplete = false
                setTimeout(() => {
                    this.loadComplete = true
                }, 1000)
            }
        }
  }
</script>

只是为了澄清无限更新循环的来源。

v-if="loadComplete = !loadComplete" 是一个赋值,您将值 !loadComplete 赋值给 loadComplete。每当你在 Vue 中分配一个变量时,它都会触发一个新的渲染,并且在下一个渲染中它会再次执行相同的分配......这会导致无限循环。

@PaulTsai 用正确的方式举了一个很好的例子v-if="!loadComplete"