我正试图为我的组件生成唯一的ID。
我想,既然是全局性的,那就把它放在Vuex中吧,用一个类似于 lastGeneratedID: 0
的状态,以及一个增量这个值的突变。
现在,当一个组件想要有一个新的ID时,它必须先读取这个值,然后再递增,总是以这种方式,总是同时执行这两个操作,否则事情就会变得很混乱。
有没有办法让我把这两个功能集中到一个函数中(最好不要只在 $root
例如)还是我不应该做这种事情?
或者我应该把这个字段命名为 lastGeneratedIDAlwaysHasToBeIncrementedAfterReadingDontYouDareNotIncrementing
? :D
你为什么不先调用突变,来增量id,然后再读取。JS是单线程的,所以你不能有赛车条件。
this.$store.commit('INCREMENT_ID')
const myId = this.$store.state.id
你可以把这两行都打包在另一个函数里,只调用那一个。
export default getNewID = () => {
store.commit('INCREMENT_ID')
return store.state.id
}
我假设你是从一个包里导出的,也是这样的 import
存储。
另一种选择是生成一个唯一的id,这样你就不需要跟踪生成的id了。你可以使用一个uuid包,比如 这个