【发布时间】:2021-07-27 04:36:39
【问题描述】:
我正在使用 Svelte 代码,作为构建一个非常简单的购物篮/商店的一部分,但有一个我无法解决的问题!
问题:
我想更新对象数组中的特定属性,这些属性已在 Svelte 可写存储中使用,但我所做的任何更改似乎都被忽略了!
背景:
我有一个 Svelte 可写存储,定义为:
let products = writable(myjson.default);
这由一个数组中的 6 个对象组成,类似于:
[
{
"id": 1,
"name": "Italian House Blend",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ac tellus finibus, molestie purus id, placerat augue. Sed in arcu placerat, ultricies nibh et, auctor dolor.",
"image": "/images/1.png",
"large_image": "/images/1_large.png",
"price": 18,
"quantity": 1,
"variant": ""
},...
我正在寻找更新变体条目 - 这将是以下三个条目之一:Coarse、Fine、WholeBean。这些来自我的产品卡组件中的下拉菜单。
下拉列表的值来源于此:
let questions = [
{ id: 1, text: `Coarse` },
{ id: 2, text: `Fine` },
{ id: 3, text: `Whole Bean` }
];
... 我有一个 #each 块,它可以迭代并在屏幕上正确显示文本值。下拉框必须允许双向更新(这是通过名为selected 的属性完成的)
我已经能够 console.log out 在我的 addToCart 函数中选择的值 - 这将显示选定的值:
const addToCart = (product) => {
console.log("selected", selected)
for (let item of $cart) {
if(item.id === product.id) {
product.quantity += 1
product.variant = selected.text <---- SOURCE OF PROBLEM??
$cart = $cart;
return;
}
}
$cart = [...$cart, product]
console.log("cart", $cart)
}
我的问题是我想将selected.text 属性添加到对象数组中,所以我最终在console.log 中得到了这个,然后可以在稍后阶段输出variant 属性:
cart
[{…}]
0:
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ac tellus finibus, molestie purus id, placerat augue. Sed in arcu placerat, ultricies nibh et, auctor dolor."
id: 1
image: "/images/1.png"
large_image: "/images/1_large.png"
name: "Italian House Blend"
price: 18
quantity: 1
variant: "<<NAME APPEARS HERE>>"
__proto__: Object
length: 1
__proto__: Array(0)
我知道我遗漏了一些明显的东西,但是花了 2 个小时试图弄清楚,我的头很痛!任何人都可以帮助我指出正确的方向吗?
【问题讨论】:
-
你能添加一个 REPL 吗?
-
我创建了一个 REPL - 你可以在 svelte.dev/repl/6627f14b8efc4aa785d92b32fb45f6bc?version=3.38.2 看到它。这是我的测试网站的精简版。
-
复制 - 点击 App.svelte 中的添加到购物车 - 在 REPL 控制台日志中,展开购物车条目。列表中有一个variant属性,为空;这是我希望用下拉字段中的值替换的那个。
标签: svelte