【发布时间】:2018-01-21 17:40:13
【问题描述】:
假设我有以下树:
[
{
name: 'asd',
is_whatever: true,
children: [
{
name: 'asd',
is_whatever: false,
children: [],
},
],
},
],
树通过 Vuex 存储在一个模块中,位于键“tree”下,并使用以下称为“recursive-item”的递归组件循环:
<li class="recursive-item" v-for="item in tree">
{{ item.name }}
<div v-if="item.is_whatever">on</div>
<div v-else>off</div>
<ul v-if="tree.children.length">
<recursive-item :tree="item.children"></recursive-item>
</ul>
</li>
现在我想切换项目的属性“is_whatever”,所以我附加了一个监听器
<div v-if="item.is_whatever"
@click="item.is_whatever = !item.is_whatever">on</div>
<div v-else>off</div>
当我点击它时,它可以工作,但会发出以下声音
"Error: [vuex] Do not mutate vuex store state outside mutation handlers."
[vuex] Do not mutate vuex store state outside mutation handlers.
如果没有这个错误,我应该如何实现它?我看不到如何将动作或事件发送到树的顶部,因为它是嵌套的和递归的,所以我没有指向特定项目的路径,对吧?
【问题讨论】:
-
Per LinusBorg (4/2017):“最好的办法是避免嵌套结构。这是 ... redux 中的既定模式”取而代之的是,normalize your data
标签: javascript recursion nested vue.js vuex