在 PUT 请求中使用括号表示法设置 json 对象的嵌套 属性 (svelte + strapi)
Set nested property of json object using brackets notation in PUT request (svelte + strapi)
我在项目中使用 Svelte 和 Strapi。
这是我的问题的简化版本:
我要发送 PUT 请求的 json。 (localhost:1337/shapes/1
)
{
id: 1,
name: 'square',
colors: {
red: false,
blue: false,
green: false
}
}
svelte 模板中的切换按钮:
{#each shapes as shape}
<div on:click={toggleColor(shape, "red")}>red</div>
<div on:click={toggleColor(shape, "blue")}>blue</div>
<div on:click={toggleColor(shape, "green")}>green</div>
{/each}
切换功能(查看评论以查找缺少的内容):
function toggleColor(shape, color) {
let index = shapes.indexOf(shape);
axios.put(`http://localhost:1337/shapes/${shape.id}`, {
// How to write this part to toggle a color?
// The commented code below doesn't work as it doesn't set a color without
// reseting others siblings
// colors: {
// [color]: shape.colors[color] ? false : true
// }
})
.then((res) => {
coins[index].colors[color] = res.data.colors[color];
})
.catch((err) => {
console.log(err.message)
});
}
为了更清楚地了解这个版本发生了什么,它 returns 如果我点击 blue button
然后 red button
:
{
id: 1,
name: 'square',
colors: {
red: true,
blue: null,
green: null
}
}
预期响应:
{
id: 1,
name: 'square',
colors: {
red: true,
blue: true,
green: false
}
}
你快到了。以下代码:
{
colors: {
[color]: shape.colors[color] ? false : true
}
}
...将重新定义 colors
为其中只有一种颜色的对象。要同时获得以前的颜色,请使用 spread syntax,例如:
{
colors: {
...shape.colors,
[color]: shape.colors[color] ? false : true
}
}
我在项目中使用 Svelte 和 Strapi。 这是我的问题的简化版本:
我要发送 PUT 请求的 json。 (localhost:1337/shapes/1
)
{
id: 1,
name: 'square',
colors: {
red: false,
blue: false,
green: false
}
}
svelte 模板中的切换按钮:
{#each shapes as shape}
<div on:click={toggleColor(shape, "red")}>red</div>
<div on:click={toggleColor(shape, "blue")}>blue</div>
<div on:click={toggleColor(shape, "green")}>green</div>
{/each}
切换功能(查看评论以查找缺少的内容):
function toggleColor(shape, color) {
let index = shapes.indexOf(shape);
axios.put(`http://localhost:1337/shapes/${shape.id}`, {
// How to write this part to toggle a color?
// The commented code below doesn't work as it doesn't set a color without
// reseting others siblings
// colors: {
// [color]: shape.colors[color] ? false : true
// }
})
.then((res) => {
coins[index].colors[color] = res.data.colors[color];
})
.catch((err) => {
console.log(err.message)
});
}
为了更清楚地了解这个版本发生了什么,它 returns 如果我点击 blue button
然后 red button
:
{
id: 1,
name: 'square',
colors: {
red: true,
blue: null,
green: null
}
}
预期响应:
{
id: 1,
name: 'square',
colors: {
red: true,
blue: true,
green: false
}
}
你快到了。以下代码:
{
colors: {
[color]: shape.colors[color] ? false : true
}
}
...将重新定义 colors
为其中只有一种颜色的对象。要同时获得以前的颜色,请使用 spread syntax,例如:
{
colors: {
...shape.colors,
[color]: shape.colors[color] ? false : true
}
}