javascript - Vue 3 与 Vuex 4 : v-for only rendering a few -- but not all -- items in an array

标签 javascript vue.js vue-component vuex v-for

这里是首次用户和初学者开发人员 - 提前感谢您的帮助!

因此,我正在制作一个简单的 Web 应用程序,它从 API 获取 http JSON 响应,并呈现一个更美观的结果列表。然而,由于某种原因,当使用 v-for 指令渲染项目时,仅显示响应数组中的前几个结果。这是我的 main.js:

import { createApp } from 'vue';
import { createStore } from 'vuex';

import App from './App.vue'
import Axios from "axios";

const store = createStore({
    state(){
        return {
            searchResults: null,
        }
    },
    getters: {

    },
    mutations: {
        setResults(state, payload){
            state.searchResults = payload.claims;
        },
        clearResults(state){
            state.searchResults = null;
        }
    },
    actions: {
        submitSearch(context, payload) {
            context.commit('clearResults');
            Axios.request({
              baseURL: "https://factchecktools.googleapis.com/v1alpha1/claims:search",
              method: "get",
              params: {
                languageCode: "en",
                query: payload.searchTerm,
                pageSize: 100,
                key: "AIzaSyCqYStCPuaamvXv1qcuWeof0pEx8TguXeY",
              },
            })
              .then((response) => {
                context.commit('setResults', {claims: response.data.claims})
                //this.$store.dispatch('setResults', {result: response.data.claims})
                //this.searchResults = response.data.claims;
                //this.$emit("search-results", this.searchResults);
              })
              .catch((error) => {
                console.log(error);
              });
        },

    },
})

这是我的 app.vue:

<template>
  <div class="container">
    <ClaimSearch @search-results="setResults" />
    <ResultCard
      v-for="(result, index) in searchResults"
      :key="index"
      :claim="result.text"
      :claimant="result.claimant"
      :date="result.claimDate"
      :reviews="result.claimReview"
    />
  </div>
</template>

<script>
import ClaimSearch from "./components/ClaimSearch.vue";
import ResultCard from "./components/ResultCard.vue";

export default {
  name: "App",
  components: {
    ClaimSearch,
    ResultCard,
  },
  computed: {
    searchResults(){
      return this.$store.state.searchResults;
    }
  },
};
</script>

这是我的 ClaimSearch.vue 组件:

<template>
  <form @submit.prevent="submitSearch" class="searchBar">
    <input type="text" v-model="searchTerm" />
    <button type="submit">Is it true?</button>
  </form>
</template>

<script>
export default {
  data() {
    return {
      searchTerm: null,
    };
  },
  computed: {},
  methods: {
    submitSearch(){
      this.$store.dispatch('submitSearch', {searchTerm: this.searchTerm})
    }
  },
};
</script>

最后,这是我的 ResultCar.vue 组件:

<template>
  <div class="resultCard">
    <div class="claimCard">
      <h3>The Claim:</h3>
      <p>{{ claim }} - {{ claimant }}, on {{ date.slice(0, 10) }}</p>
    </div>

    <div class="checkCard">
      <h3>Fact Check:</h3>
      <hr />

      <div v-for="review in reviewList" :key="review.url">
        <b>{{ review.publisher.name }}</b>
        rated this claim as "<b>{{ review.textualRating }}</b
        >". <br />
        Source: "<a :href="review.url" target="_blank"> {{ review.title }} </a>"
        <br />
        - published {{ review.reviewDate.slice(0, 10) }}. <br />
        <hr />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: ["claim", "claimant", "date", "reviews"],
  data() {
    return {};
  },
  computed: {
    reviewList() {
      return this.reviews;
    },
  },
};
</script>

使用上面的代码,当 API 调用获取包含 100 个项目的数组时,只有前五或六项显示 - 而某些查询根本不显示。给出了什么?

再次感谢——我知道, super 菜鸟!

最佳答案

好吧,我通过简单地构建和部署应用程序解决了这个问题。我猜想 Vue 出了问题,在本地开发服务器上测试时 v-for 函数中断了?

无论如何,谢谢!

关于javascript - Vue 3 与 Vuex 4 : v-for only rendering a few -- but not all -- items in an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64327831/

相关文章:

javascript - 如何以函数式编程风格修改数组?

javascript - 如何使用 Ant Design Vue 在 Select 中禁用特定元素?

javascript - Vue 文本输入掩码

loops - 我怎样才能 "while loop"一个 Axios GET 调用直到满足条件?

javascript - 如何将 if 语句与 v-for 一起使用?

javascript - 响应图像(通过管道和 response.end())导致奇怪的行为

javascript - 将另一个页面H1内容存储在var中并检查是否有单词

javascript - 尝试将 Vue JS 与语义 UI 集成时不会阻止表单提交

javascript - Vuex getter 不会更新

javascript - UI 的日志框架?