无法访问 Vuex 商店中的特定状态属性

时间:2021-02-16 16:14:56

标签: javascript vue.js vuex

我商店的状态对象有 3 个属性:user_idfavoritesposted_states

这是我的状态对象:

state: {
        favorites: [],
        user_id: null,
        posted_states: []
  
      },

我有一个操作来查询我的数据库,并将 user_id 属性设置为返回值。 问题是,在另一个操作中,当我尝试访问 user_id 属性时,它总是返回 null。我注意到的奇怪之处是,如果我尝试记录实际的 state 变量,它会显示我提到的 3 个属性,并且 user_id 属性正确显示了 ID,并且不为空。

Output of console.log

Code for above screenshot

如你所见,直接访问状态总是返回null。更奇怪的是,如果我尝试从不同的操作访问 state.user_id,它会返回正确的 user_id 并且不为空。

这是我得到 user_id 的操作:

get_current_user_id ({commit, state, dispatch})
        {
          Nova.request().get('/nova-vendor/favorites-tool/get_current_user_id')
          .then((response) => {
              // handle success
              if (response.data) {
                commit('set_user_id', response.data)
              }
  
          })

这是我设置 user_id 的突变

set_user_id(state, payload) {
          state.user_id = payload
        },

老实说,我认为问题不在于突变,也不在于行为本身。我也试过完全跳过突变并直接设置它,这不起作用。我尝试使用 getter 而不是直接访问它,还尝试将我的组件分成一个父子组件,其中父组件调度操作来设置 user_id,子组件调度需要 user_id 的操作,假设这会如果竞争条件存在,则消除它(但是,我也不认为这也是竞争条件。)

1 个答案:

答案 0 :(得分:0)

只是张贴这个以防有人遇到这个问题 - 这个问题确实是一个竞争条件。我通过编写将 user_id 作为承诺提交的操作,然后更改要求 user_id 仅在承诺解决时才调度的第二个操作来修复它,遵循以下评论:https://stackoverflow.com/a/40167499/12462293< /p>