【问题标题】:Vuex setting variables in state from actionsVuex 从动作中设置状态变量
【发布时间】:2022-01-05 08:15:39
【问题描述】:
  1. 我正在尝试在状态中填充变量 onSale 但无法填充。 我从 json 文件中获取数据。我的代码有什么问题?

  2. 一个单独的问题是有时我看到“上下文”这个词而不是“状态”,需要什么以及何时使用它?

感谢您的帮助。

state: {
  products: [],         
    onSale: [],
},
actions: {

  async fetchProducts({commit, state}) {
    axios.get('/src/assets/phones.json')
      .then(response => {
      commit('setProducts', response.data) //      setProducts(state, products) {
      // alert(response.data)
    })

    let allM = []
    await  state.products.map((d) => {
      for (let i = 0; i < Object.keys(d).length; i++) {
        if (d["onSale"])
          allM.push(d["onSale"])
          }
    })
    //alert(allM)
    //return new Promise((resolve, reject) => {
    commit('setOnSale1', allM)
    //    alert(allM)

  })
},
mutations: {
  setOnSale1(state, onSale) {
    state.onSale = onSale
  },
},

【问题讨论】:

  • 问题在 1 中缺乏明确的问题陈述。究竟什么不起作用?有错误吗?问题可能与 2 有关,也可能与其他问题有关。 context 是具有 state 的对象,还有您在操作、突变等中需要的其他东西 - commitdispatch 等,否则您无法访问它们。第一个参数是context,而不是state。如果只是调用它state,它将无法正常工作
  • 感谢 Estus Flask,我无法在状态下填充 onSale 数组,我尝试从操作中执行此操作,但在尝试提醒它时得到空响应。
  • 应该是setOnSale1({ state }setOnSale1(context。还有其他问题,promise 需要直截了当和正确。您尝试使用new Promise(此处不正确)和then(不建议使用async/await)意味着它们需要特别注意。至少应该是await axios.get...

标签: vue.js vuex


【解决方案1】:

我解决了:

    actions: {

         async fetchProducts({commit, state}) {
             await axios.get('/src/assets/phones.json')
                 .then(response => {
                     commit('setProducts', response.data) //      setProducts(state, products) {
                     // alert(response.data)
                 })

             let allM = []
             state.products.map((d) => {
                 for (let i = 0; i < Object.keys(d).length; i++) {
                     // alert(d)
                     if (d["onSale"])
                         allM.push(d["onSale"])
                 }
             })
             commit('setOnSale1', allM[0])
         },

.............

 mutations: {
        setOnSale1(state, onSale) {
            state.onSale = onSale
        },

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 2020-11-24
    • 2019-10-12
    • 2018-11-04
    • 2019-08-31
    • 1970-01-01
    • 2020-03-19
    • 2018-10-19
    相关资源
    最近更新 更多