我有一个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;
}
}
从父组件中,我正在调用Vuex commit('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]
});
用户变异:
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;
}
};
我向UserDialog
上面的组件添加了一个计算属性:
public get userId() {
return this.$store.state.users.show;
}
有一种想法认为这可能是反应性的,而@Users.State
装饰show
属性却不是。不幸的是,它们的性能完全相同。
@Derek和我昨晚交谈,意识到这个问题的原因是由于状态转换为“未定义”而当前的Reactive系统无法处理(当使用Object Proxies到达Vue-NEXT时应该没问题)。剩下的代码工作得很好,当我从转出的状态转变:undefined → string → undefined
对null → string → undefined
。
非常感谢@Derek花费的时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句