账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue vuex mapState created执行顺序
    50
    0
    A组件:
      存储:localStorage.setItem('articles', JSON.stringify(articles))
    B组件:
    computed: {
          ...mapState([
              "articles"
          ])
      },
      created(){
            var currentId = parseInt(this.$route.query.id);
            this.currentArticle = this.articles.filter((item)=>{
            return item.id === currentId   
            });
            this.isCollected = this.currentArticle[0].isCollected;
            this.collectNum = this.currentArticle[0].collectNum;
            console.log(this.currentArticle)
      },
    vuex:
    state.js:  articles:localStorage["articles"]?JSON.parse(localStorage["articles"]): []
    

    进入A组件后,调用接口,请求回数据后,存到localStorage中,点击路由跳转到B组件,为什么在created()中 this.articles 为 [],页面上没有数据,当我进入B组件后再次刷新页面就有数据了,这里面的computed()和 created()是不是有执行顺序的问题?应该怎么解决这个问题呢?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 奇怪的石头 普通会员 1楼

      在Vue.js中,mapState是一个钩子函数,用于将状态数据映射到Vue实例的state属性中。在Vue.js的组件中,状态数据通常在组件实例创建时通过created生命周期钩子函数获取,然后在组件实例渲染时通过mounted生命周期钩子函数获取。假设你的State对象包含以下属性:

      javascript export default { state: { count: 0 }, getters: { count: (state) => state.count }, mutations: { increment: (state) => { state.count++ } } }

      在组件实例的created生命周期钩子函数中,你可以使用mapState来获取和更新状态数据:

      javascript export default { created() { this.mapState(); }, methods: { mapState() { this.$store.state.count = this.count; } } }

      在组件实例的mounted生命周期钩子函数中,你可以使用mapState来更新状态数据:

      javascript export default { mounted() { this.mapState(); }, methods: { mapState() { this.$store.state.count = this.count + 1; } } }

      在组件实例的beforeDestroy生命周期钩子函数中,你可以使用mapState来更新状态数据:

      javascript export default { beforeDestroy() { this.mapState(); }, methods: { mapState() { this.$store.state.count = this.count - 1; } } }

      需要注意的是,mapState函数不会直接修改状态数据,而是返回一个新的状态对象,该对象包含了状态数据的引用,可以被后续的mutatepatch操作更新。这样,mapState函数在每次状态数据被更新时都会重新调用自身,从而实现状态数据的同步更新。如果你希望在状态数据被更新时立即更新实例,可以使用setstateupdate方法,而不是直接修改状态数据。例如:

      javascript export default { setstate(state) { this.$store.state.count = state.count; }, update(state) { this.$store.state.count = state.count + 1; } }

      setstate方法中,state参数是一个包含状态数据的JavaScript对象,而this参数是当前组件实例的引用,可以用来更新状态数据。在update方法中,state参数也是一个包含状态数据的JavaScript对象,而this参数也是当前组件实例的引用,可以用来更新状态数据。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部