如何捕获一个空的 Vuex 存储状态,但在初始化时让计算的 属性 对其做出反应
How to catch an empty Vuex Store state but have a computed property react to it when initialized
我正在使用 Vuex 在 Vue Storefront 中开发一个项目。
我有以下元素可以在我的网上商店中对产品进行分类
<SfSelect
class="navbar__select sort-by"
ref="SortBy"
:selected="selectedSorting"
@change="setSortingAttribute"
>
<SfSelectOption
v-for="attribute in getSortingAttributes"
:key="attribute.id"
:value="attribute.title"
class="sort-by__option"
@click="setSelectedSortingAttribute(attribute)"
>
{{ attribute.title }}
</SfSelectOption>
</SfSelect>
其中 v-for="attribute in getSortingAttributes"
对所有可用过滤器执行 for 循环。
这些过滤器是通过以下计算从 Vuex 存储状态调用的 属性:
getSortingAttributes: function () {
if (store.state.tweakwise.tweakwiseLayeredNavigationAttributes
.properties.sortfields
) {
var tempSortAttributes =
this.$store.state.tweakwise.tweakwiseLayeredNavigationAttributes
.properties.sortfields;
return tempSortAttributes;
}
},
此数组位于 Vuex Store (tweakwiseLayeredNavigationAttributes.properties.sortfields) 中,其中 .poperties 是数组中的一个对象。该数组是通过 API 调用填充的,此调用是通过 Mount() 在与我上面提到的 SfSelect 函数相同的 class 中触发的。
尽管我在 getSortingAttributes
中添加了一个 if-statement
以防止它调用未定义的数据并使其成为计算的 属性 (一旦数据可用就调用它) ,我仍然收到以下错误:
渲染时出错:CategoryX/SubcategoryY/
TypeError: 无法读取未定义的 属性 'sortfields'
您应该为您的代码添加安全措施 - 使用新的 nullish coalescing operator 或旧式布尔值或:
getSortingAttributes()
{
return this.$store.state.tweakwise?.tweakwiseLayeredNavigationAttributes?.properties?.sortfields || [];
},
getSortingAttributes()
{
return (((this.$store.state.tweakwise || {}).tweakwiseLayeredNavigationAttributes || {}).properties || {}).sortfields || [];
},
我正在使用 Vuex 在 Vue Storefront 中开发一个项目。
我有以下元素可以在我的网上商店中对产品进行分类
<SfSelect
class="navbar__select sort-by"
ref="SortBy"
:selected="selectedSorting"
@change="setSortingAttribute"
>
<SfSelectOption
v-for="attribute in getSortingAttributes"
:key="attribute.id"
:value="attribute.title"
class="sort-by__option"
@click="setSelectedSortingAttribute(attribute)"
>
{{ attribute.title }}
</SfSelectOption>
</SfSelect>
其中 v-for="attribute in getSortingAttributes"
对所有可用过滤器执行 for 循环。
这些过滤器是通过以下计算从 Vuex 存储状态调用的 属性:
getSortingAttributes: function () {
if (store.state.tweakwise.tweakwiseLayeredNavigationAttributes
.properties.sortfields
) {
var tempSortAttributes =
this.$store.state.tweakwise.tweakwiseLayeredNavigationAttributes
.properties.sortfields;
return tempSortAttributes;
}
},
此数组位于 Vuex Store (tweakwiseLayeredNavigationAttributes.properties.sortfields) 中,其中 .poperties 是数组中的一个对象。该数组是通过 API 调用填充的,此调用是通过 Mount() 在与我上面提到的 SfSelect 函数相同的 class 中触发的。
尽管我在 getSortingAttributes
中添加了一个 if-statement
以防止它调用未定义的数据并使其成为计算的 属性 (一旦数据可用就调用它) ,我仍然收到以下错误:
渲染时出错:CategoryX/SubcategoryY/
TypeError: 无法读取未定义的 属性 'sortfields'
您应该为您的代码添加安全措施 - 使用新的 nullish coalescing operator 或旧式布尔值或:
getSortingAttributes()
{
return this.$store.state.tweakwise?.tweakwiseLayeredNavigationAttributes?.properties?.sortfields || [];
},
getSortingAttributes()
{
return (((this.$store.state.tweakwise || {}).tweakwiseLayeredNavigationAttributes || {}).properties || {}).sortfields || [];
},