Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js Vuex ID生成器_Vue.js_Vuex - Fatal编程技术网

Vue.js Vuex ID生成器

Vue.js Vuex ID生成器,vue.js,vuex,Vue.js,Vuex,我正在尝试为我的组件生成唯一的ID 我想,由于它是全局的,最好将它放在Vuex中,状态中有一个类似lastGeneratedID:0的字段,并有一个使该值递增的突变 现在,当一个组件想要有一个新的ID时,它必须先读取值,然后递增,总是在这个顺序中,总是执行这两个操作,否则事情会变得一团糟 有没有一种方法可以将这两个函数集中在一个函数中(最好不只是在$root实例上),或者我应该不做这种事情 或者我应该只命名字段LastGeneratedDalways在读取完DontYou't Dare Not

我正在尝试为我的组件生成唯一的ID

我想,由于它是全局的,最好将它放在Vuex中,状态中有一个类似
lastGeneratedID:0的字段,并有一个使该值递增的突变

现在,当一个组件想要有一个新的ID时,它必须先读取值,然后递增,总是在这个顺序中,总是执行这两个操作,否则事情会变得一团糟

有没有一种方法可以将这两个函数集中在一个函数中(最好不只是在
$root
实例上),或者我应该不做这种事情


或者我应该只命名字段
LastGeneratedDalways在读取完DontYou't Dare Not Incrementing
后将被递增: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
store


另一种方法是生成一个唯一的id,因此您不需要跟踪生成的id。您可以使用类似于

的uuid包,因为我不能保证我和我的同事总能想到正确的顺序,甚至不能同时调用这两个操作。无论如何,谢谢你的软件包链接,听起来很简单!然后将该函数打包到另一个函数中,并只调用该函数。但在正常的Vue设置中,我应该将该函数放在哪里?我不想把它放在
$root
组件中,你也不能向Vuex添加函数,我也不想要任何只返回承诺的东西,比如Actions创建一个新的js文件并导出它。在我的回答中,我使用了默认导出,但您可以使用命名导出。然后将该包导入任何需要的地方。