我有一个UserDialog组件,它利用 Vuex 状态树的一部分来确定它是否应该显示自己:
import { Component, Prop, Vue } from 'vue-property-decorator';
import { State, Getter, Mutation, Action, namespace } from 'vuex-class';
import { fk } from 'firemodel';
import { User } from '@/models/User';
const Users = namespace('users');
@Component({})
export default class UserDialog extends Vue {
@Prop() public id!: fk;
@Users.State public show: fk;
@Users.Getter public selectedUser: User;
@Users.Mutation public HIDE_USER_PROFILE: () => void;
public get showDialog() {
return this.show === undefined ? false : true;
}
}
Run Code Online (Sandbox Code Playgroud)
我从父组件调用 Vuexcommit('SHOW_USER_PROFILE', id)并因此设置此 ID,它应该相应地更新UserDialog的show属性。
我可以很清楚地看到 Vuex 商店收到了对 SHOW_USER_PROFILE 的调用,并且确实更新了状态树中的状态(这是通过浏览器中的 Vue Developer 插件)。但是当我切换到UserProfile组件时,我发现它仍然没有收到状态更新。
注意:如果我在设置了要突出显示的 UserID 后重新加载页面(又名 CMD-R),它会重新加载组件,因为我正在使用
veux-persist,ID 仍然设置在状态树中。在这一点上,组件确实收到了正确的状态,但是当依赖于正常的反应性系统时,它就不起作用了。
任何人都可以帮忙吗?
对于其他上下文,这里还有一些模块:
商店定义::
export default new Vuex.Store<IRootState>({
modules: {
packages,
users,
searchCriteria,
snackbar
},
plugins: [FireModelPlugin, localStorage.plugin]
});
Run Code Online (Sandbox Code Playgroud)
用户突变:
const mutations: MutationTree<IUsers> = {
selectUser(state, id: fk) {
state.selected = id;
},
SHOW_USER_PROFILE(state, id: fk) {
state.show = id;
},
HIDE_USER_PROFILE(state) {
state.show = undefined;
}
};
Run Code Online (Sandbox Code Playgroud)
我在UserDialog上面的组件中添加了一个计算属性:
public get userId() {
return this.$store.state.users.show;
}
Run Code Online (Sandbox Code Playgroud)
有人认为这可能是反应性的,而@Users.State装饰show属性则不是。不幸的是,它们的性能完全相同。
@Derek 和我昨晚交谈并意识到这个问题的原因是由于状态转换为“未定义”,当前的响应式系统无法处理(当我们使用对象代理到达 Vue-NEXT 时应该没问题)。undefined \xe2\x86\x92 string \xe2\x86\x92 undefined当我将状态转换从: 切换到 时,其余代码工作得很好null \xe2\x86\x92 string \xe2\x86\x92 undefined。
非常感谢@Derek 花时间。
\n| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |