在 Vuex Store 中分页时维护状态

2024-01-21

我正在对来自 Vuex 商店的数据进行分页,我能够成功完成此操作,但在将数据添加到购物车时遇到问题。我只能将一项添加到购物车中,添加第二项时出现“无法读取未定义的属性‘id’”错误。

我已经改用 Vuex 状态映射,它可以工作,但我仍然收到错误。我正在使用这个包https://github.com/vueschool/learn-vuex https://github.com/vueschool/learn-vuex.

Component.vue

<template>
<div>
<ul>
 <li class="d-s-i al-l" v-for="product in products" :key="product.id">
{{ product.name }} - {{ product.price}}
<button @click="addProductToCart(product)">
 Add to cart
</button>
</li>
<div class="paginate">
 <pagination :data="pages" @pagination-change-page="fetchProducts"> 
 </pagination>
</div>
</div>
</template>

<script>
import {mapState, mapActions} from 'vuex'
  export default {
computed: {
      ...mapState({
        products: state => state.products.items,
        pages: state => state.products.productMeta
      })
      },
  methods: {
      ...mapActions({
        fetchProducts: 'products/fetchProducts',
        addProductToCart: 'cart/addProductToCart'
      })
    },
    created () {
      this.loading = true
      this.fetchProducts();
    }
}
</script>

Product State
export default {
  namespaced: true,

  state: {
    items: [],
    productMeta: {}
  },
mutations: {
    setProducts (state, products) {
      // update products
      state.items = products
    },
    setPagination (state, products) {
      // update products
      state.productMeta = products
    },
actions: {
    fetchProducts({commit}, page=1) {
      axios.get('/products?page=' + page).then(response => {
          commit('setProducts', response.data.data)
          commit('setPagination', response.data)
        })
      }
    }
}

Cart State
export default {
  namespaced: true,

  state: {
    // {id, quantity}
    items: [],
    checkoutStatus: null
  },
getters: {
    cartProducts (state, getters, rootState, rootGetters) {
      return state.items.map(cartItem => {
        const product = rootState.products.items.find(product => product.id === cartItem.id)
        return {
          id: product.id,
          name: product.name,
          slug: product.slug,
          price: product.price,
          quantity: cartItem.quantity
        }
      })
    },
mutations: {
    pushProductToCart (state, productId) {
      state.items.push({
        id: productId,
        quantity: 1
      });
    },
actions: {
    addProductToCart({state, getters, commit, rootState, rootGetters}, product) {
      if (rootGetters['products/productIsInStock'](product)) {
        const cartItem = state.items.find(item => item.id === product.id)
        if (!cartItem) {
          commit('pushProductToCart', product.id)
        } else {
          commit('incrementItemQuantity', cartItem)
        }
        commit('products/decrementProductInventory', product, {root: true})
      }
    }
}
}

Laravel Controller
public function newproducts()
  {
    $products = Product::latest()->paginate(10);
    return response()->json($products);
  }

该错误确实很奇怪,因为添加了一个项目,但添加第二个项目(从另一页)会引发错误。

The first image shows the loaded states on page 1 Page 1

The second image shows that the states aren't loaded after navigating to page 2 Page 2

我还发现反之亦然,如果我先导航到第二页,第 2 页上的产品会成功添加到购物车,但当我切换回第 1 页时,我收到错误并且状态未加载。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Vuex Store 中分页时维护状态 的相关文章

  • Vuetify 自动完成类似项目未显示

    我的本地案例中有类似标题的自定义帖子API我尝试通过搜索查询显示帖子items array Data count 5 entries id 3 title Senior developer Python id 4 title Senior
  • 个人Vue 3组件包缺少模板或渲染函数

    我最近将自己的 Vue 3 组件上传到 NPM 以供其他人使用 当在其他项目中使用它时 它会发出以下警告 Vue warn Component is missing template or render function at
  • 重置密码 电子邮件

    我是 Laravel 开发新手 目前正在从事小型项目 我想自定义重置密码的电子邮件模板 甚至将其链接到完全不同的模板 对于身份验证脚手架 我使用了php artisan make auth命令 但是 默认重置密码功能使用默认的 Larave
  • laravel 4 登录验证失败

    在 Laravel4 中 我在路由中编写了以下代码 但它总是将我重定向到登录页面 我用谷歌搜索并在堆栈溢出上找到了它 并尝试了所有解决方案但没有成功 我确信这将是一个愚蠢的错误 但请跟踪它 谢谢 Routes Route post logi
  • 从组件传递数据

    我对 Vue 相当陌生 我正在尝试将数据从组件传递到视图 我不确定我是否在使用props正确的 我有一个对话框 当我保存时 我想将数据插入数据库 我也想重复使用addCustomer function 这就是为什么我没有将该函数放置在组件中
  • Blade @if 中的 Laravel 会话变量

    当我尝试使用 Laravel Session 在刀片中设置 JS 变量来刷新一些数据时 我在 Laravel 4 2 中遇到了一些奇怪的情况 这很简单 我不知道我错过了什么 目标 在用户注册后立即触发 Javascript 网站浏览 方法
  • Laravel 集成测试:如何断言一个 URL 已被调用但另一个 URL 没有

    我想测试一个向某个 URL 发出请求的控制器 例如 http example com api say hello 但它不会向另一个 URL 发出请求 例如 http example com api say bye bye 我想测试的控制器功
  • 从 octobercms 中的非 ajax 表单获取输入值

    我正在尝试构建一个简单的搜索功能 下面是我的搜索表格
  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • Laravel,从 JSON 中删除 null Eloquent 对象属性

    有没有一种优雅的方法从 Eloquent 对象中删除 NULL 值 我的对象嵌套有关系 这个特定的调用可能会长达数千行 所以我尝试这样做的主要原因是为用户节省带宽 但服务器性能也是一个考虑因素 My code data locations
  • 这个条带请求是什么?为什么它会多次触发?

    对于使用 stripe 的 Laravel 应用程序 此请求https r stripe com 0被解雇多次 如下所示 我刷新主页后 这些请求立即被触发 问题是我最近得到了一个429 too many requests我的实时服务器出现错
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad
  • AWS-PHP-SDK / SNS 直接寻址返回错误

    您好 我正在使用 Laravel 4 设置来利用 AWS SNS 向我的 iOS 设备发送推送消息 从 AWS 控制台向我的设备发布命令效果很好 然后我尝试从 PHP sns AWS get sns sns gt publish array
  • 左侧导航菜单上部隐藏

    当滚动到页面最底部时 左侧导航菜单的顶部将被隐藏 The image before scrolling is shown below 滚动后的效果如下图 我不确定此问题的确切原因 因此我将不胜感激任何有关识别和解决该问题的建议或帮助 为了确
  • 如何处理 Nuxt 中导致页面渲染崩溃的 apollo 客户端错误?

    我目前正在维护一个生产 Nuxt js Vue 应用程序 该应用程序集成了 GraphQL Apollo 客户端 该客户端遇到页面渲染错误 为了增加获得回复的机会 我构建了一个简单的代码示例 仅展示我们遇到的问题 谢谢大家 源代码 Clie
  • 如何将 Laravel-5.6 转换为 .exe

    我正在本地主机中加载项目 我的管理员要求我将 laravel 5 6 与 mysql 一起转换为 exe 我是这方面的新手 不知道 有哪位高手可以指导一下吗 提前致谢 我不确定你的管理员是否应该要求你将 Laravel 项目转换为 exe
  • 如何使用更新资源控制器 laravel 4?

    我有带有索引 编辑 更新方法的客户控制器 Route resource customer CustomerController 控制器方法更新 public function update id echo id 我的 HTML 表单
  • 雄辩的第一个 where 子句

    我想知道 Laravel 如何实现雄辩的语法 以便可以静态调用第一个 where 子句User where User where id 23 gt where email email gt first 他们有吗public static f
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev

随机推荐

  • 如何将逻辑运算符应用于Python列表中的所有元素

    我有一个 python 中的布尔值列表 我想对它们进行 与 或 或 或 非 并得到结果 下面的代码可以工作 但不太Pythonic def apply and alist if len alist gt 1 return alist 0 a
  • JSP 技巧让模板制作变得更容易?

    在工作中我的任务是转动一堆HTML文件转化为简单的JSP项目 它实际上都是静态的 没有可编程的服务器端逻辑 我应该提到我对 Java 完全陌生 JSP 文件似乎可以轻松地使用常见的包含和变量 就像PHP 但我想知道一种简单的方法来获得模板继
  • 是否可以通过 GitHub API 查明问题是否已通过拉取请求关闭

    I m using github script https github com marketplace actions github script for GitHub actions which allows you to easily
  • 如何在网络浏览器中以适当的比例显示 5 毫米网格?

    我正在创建一个用于显示心电图的 Web 应用程序 心电图通常是在 5 毫米方形网格上以固定比例 10 毫米 毫伏和 25 毫米 秒 绘制的 使用正确的尺寸非常重要 因为读者会将屏幕上看到的内容与可能仅存在于纸上的其他心电图进行比较 最推荐的
  • 生成 Markdown 表?

    有没有办法从对象 Python Ruby Java C 生成表 我想以编程方式创建一个简单的表 我有一些对象 我想将一些属性映射到标题 将集合映射到行 为什么是 Markdown 因为我想稍后手动编辑该文档 现在 整个过程是这样的 报告引擎
  • 如何使用 smack(java) 创建、发送和接收 iq 数据包

    我已连接到服务器 Xmpp 但无法在我的 psi 客户端发送和接收数据包 这是我的代码片段 POSClientIQ posclientiq new POSClientIQ posclientiq connectXMPPServer posc
  • 如何将我的 Google Analytics Web 应用程序转换为移动应用程序?

    我有一个移动应用程序 我应用了我的谷歌分析跟踪 ID 但是当我创建谷歌分析应用程序配置文件时 我最初选择网络应用程序而不是移动应用程序 在探索设置时 我找不到将其转换为移动应用程序的开关 我有超过 10 个具有不同谷歌分析跟踪 ID 的应用
  • 如何在 Angular 6 中导入 sass 文件

    我用 sass 创建了新的角度项目 并创建了名为 sass 的文件夹 其中包含一个名为 variables scss 的文件 在应用程序组件中 我尝试导入这样的变量 import variables 当我运行 ngserve 时出现以下错误
  • NHibernate QueryOver 带有子查询和别名

    我正在努力将以下 简化的 HQL 转换为 QueryOver select subscription from Subscription as subscription where not exists from Shipment as s
  • 在复制数据中丢失从源到接收器的数据

    在我的 MS Azure 数据工厂中 我有一个到嵌套 JSON 数据集的 REST API 连接 源 预览数据 显示所有数据 网上商店7个订单 在 活动复制数据 中 是菜单选项卡 映射 我在其中将 JSON 字段与接收器 SQL 表列进行映
  • 将代码嵌入到 docker 容器中还是将其挂载为卷?

    我是 docker 的新用户 即将在生产环境中从虚拟机迁移到容器 但后来 我突然意识到 最适合我的开发和质量保证环境的东西对于生产来说并不理想 在我的 dev 和 qa 中 我将版本化项目文件夹安装到 python php 命名它 容器中
  • 在 UIWebView 中显示图像

    我想使用在 WebView 中显示图像 img src imageInBundle png 上图在我的包里 我将它与字符串中的其他 HTML 一起加载 如下所示 myWebView loadHTMLString htmlString bas
  • Firebase Android 长按时删除 ListView 中的节点键

    尝试了很多搜索 但两天后我仍然陷入这个问题 我的 Firebase 中有以下数据库 该数据库填充在我的ListView 对于中的每一行ListView显示data1和data2 test 3db7e users W9KkXAidmHgyOp
  • 将 OpenID Connect CallbackPath 设置为 HTTPS

    我有一个 Net Core 3 1 应用程序 托管在 AWS 中的 https 负载均衡器后面 对于外界来说 它是一个 https 站点 但对于 AWS 内部来说 它在平衡器后面的 http 上运行 因此 OpenID Connect 中间
  • 使用内联汇编时出现分段错误(核心转储)错误

    我在 GCC 中使用内联汇编 我想将变量内容向左旋转 2 位 我将变量移动到 rax 寄存器 然后将其旋转 2 次 我编写了下面的代码 但遇到了分段错误 核心转储 错误 如果您能帮助我 我将不胜感激 uint64 t X 138350580
  • Visual Studio 2012 中的 strcpy() 错误

    所以我有这个代码 include stdafx h include
  • 如何访问矩阵的对角线并更改值?

    我有 8x8 矩阵 其中有 15 条对角线 左上角 对角线 1 和下角 右角 对角线 15 我想将特定的对角线集清零 例如 9 10 11 12 13 14 15 或 5 6 7 8 9 10 11 12 13 14 15 有人请给我解决方
  • pmAuto ModalPopupMode 正确使用或错误解决方法

    我在使用 TApplication ModalPopupMode pmAuto 时遇到问题 我想知道我的问题是否是由我使用 pmAuto 或 delphi 中的错误引起的 简单用例 Form1 MainForm 和 Form3 是永久表单
  • HTTP PUT 中的幂等性是什么?我可以禁止覆盖资源吗?

    我正在编写一个 REST API 我希望允许具有适当权限的经过身份验证的用户通过此 API 上传文件 我想我会用一个PUT端点来处理这个问题 我想包括一个故障保护 其中请求将被拒绝400 如果资源已经存在并且用户没有通过查询指定应该覆盖该资
  • 在 Vuex Store 中分页时维护状态

    我正在对来自 Vuex 商店的数据进行分页 我能够成功完成此操作 但在将数据添加到购物车时遇到问题 我只能将一项添加到购物车中 添加第二项时出现 无法读取未定义的属性 id 错误 我已经改用 Vuex 状态映射 它可以工作 但我仍然收到错误