Vue子组件无React

osh3o9ms  于 2023-11-21  发布在  Vue.js
关注(0)|答案(2)|浏览(157)

在一个带有Vuex store的应用程序中,有一个getQueryParams getter,它返回一个对象,该对象包含传递给数据库查询的参数。如果有任何参数(即用户已经查询了一些东西),那么我想在页面上显示一个横幅,表明他们已经这样做了(除其他事项外)。最初我通过在页面中放置以下内容来处理这个问题:

<v-row
  v-if="Object.keys(getQueryParams).length >= 1"
>
  <!-- various elements including a v-alert... -->
</v-row>

字符串
还有:

computed: {
  ...mapGetters("queryStore", ['getQueryParams']),
 ...
}


在商店里:

const getters = {
  getQueryParams(state) {
    return state.queryParams;
  },
  ...
}


这正如预期的那样,导致banner在商店更改的那一刻出现。后来,需要在多个地方使用它,我将其移动到一个单独的QueryBanner组件。在这一点上,当getQueryParams的结果更改时,banner停止出现。我可以使用Vue dev工具看到商店更改,但是,例如,新组件中显示getQueryParams输出的console.log就没有。为什么会这样?
编辑:
这也不是运气:

computed: {
    ...mapGetters('multiTagsStore', ["getQueryParams"]),
    queryStore() {
      return this.$store.getters["multiTagsStore/getQueryParams"];
    }
  },
  watch: {
    queryStore(val) {
      if (Object.keys(val).length > 0) {
        this.showBanner = true;
      }
      else {
        this.showBanner = false;
      }
    }
  },

ryoqjall

ryoqjall1#

Object.keys()返回一个非React性数组,因此不会重新计算。尝试创建另一个computed:

computed: {
  queryParamsExist () {
    return Object.keys(this.getQueryParams).length
  }
}

字符串
使用模板中计算的值:

<v-row v-if="queryParamsExist"> 
  <!-- various elements -->
</v-row>

kqhtkvqz

kqhtkvqz2#

所有试图在子组件中查看存储内容的尝试都失败了。但是,我能够通过在父组件中使用Object.keys(getQueryParams).length > 0并将此值作为prop传递给子组件来解决此问题。即。

<ResultPreviewBanner :show-banner="Object.keys(getQueryParams).length > 0" />

字符串
.和:

<v-row
  v-if="showBanner"
>


在孩子身上

相关问题