无法在对象数组中推送新对象

Posted

技术标签:

【中文标题】无法在对象数组中推送新对象【英文标题】:Not able to push new object in array of objects 【发布时间】:2020-10-11 06:24:00 【问题描述】:

遇到错误

state.products.push 不是函数

import Vue from 'vue'
import Vuex from 'vuex'
const URL =  "http://localhost:3000/products"
import axios from 'axios'
Vue.use(Vuex)
export default new Vuex.Store(
  state: 
    products: [],
    success: null,
    error: null
  ,
  mutations: 
    setAllProducts(state,payload)
      state.products =  payload
    ,
    createAProduct(state, payload) 
      const newProduct = payload
      console.log(typeof state.products)
      console.log(state)
      state.products.push(newProduct)
      
    ,
    setSuccess (state , payload) 
      state.success = payload
    , 
    setError (state, payload) 
      state.error = payload
    ,
    updateAProduct(state,payload) 
      for( let product in state.products)
      
        if(product.id == payload[1])
        
        product.productName=  payload[0].productName,
        product.productDescription =  payload[0].productDescription,
        product.manufacturer =  payload[0].manufacturer,
        product.price = payload[0].price,
        product.quantity = payload[0].quantity
        
      
    
  ,
  actions: 
    addNewProduct( commit , payload) 
      const product = 
        productName: payload.productName,
        productDescription: payload.productDescription,
        manufacturer: payload.manufacturer,
        price: payload.price,
        quantity: payload.quantity,
      
      axios.post(`$URL`, product)
      .then((data) =>
        let key =  data.id
        commit('createAProduct',...product,key)
        commit('setSuccess', `$data.data.productName is added to Products` )
      )
      .catch((error) =>
        console.log(error)
        commit('setError', error )
      
      )
    ,
    updateProduct(commit, payload)
    
      const product =  
        productName: payload[0].productName,
        productDescription: payload[0].productDescription,
        manufacturer: payload[0].manufacturer,
        price: payload[0].price,
        quantity: payload[0].quantity,
      
      axios.put(`$URL/$payload[1]`,product)
      .then((data)=>
        commit('updateAProduct', payload)
        commit('setSuccess', `$data.data.productName is updated successfully` )
      )
      
    ,
    addAllProducts( commit , payload)
    
      commit('setAllProducts',payload)
    
  ,
  getters:
    success (state) 
            return state.success
        ,
        error (state) 
            return state.error
        
  

)

有效负载具有以下属性

键:12 制造商:“H&M” 价格:“12” productDescription: "H & M javascript t 恤" 产品名称:“Deepraj maurya” 数量:“12”

添加了整个 index.js 文件,请查看。我只是在创建和更新产品

addAllProducts 通过以下方法调用:

 getAllProducts() 
      axios
        .get(`http://localhost:3000/products`)
        .then((data) => 
          console.log(typeof data)
          console.log(data)

          this.$store.dispatch("addAllProducts", data);
        );

【问题讨论】:

定义“不能”。你说的是不可能的,所以这是合乎逻辑的XY problem 现在可以了吗,请帮忙 我假设您使用的是 vuex。调用 state.products.push 之前的状态是什么? 是的,我正在使用 Vuex,state.products 的类型正在显示对象,是否可能,应该是数组吧? typeof 数组打印对象。您应该只使用 console.log(state.products) (对于文化,您可以使用 Array.isArray)。我会暗示 products 甚至不是您状态的变量,并且您错误地复制了您的代码 sn-p 或其他东西(因此 minimal reproducible example 的重要性) 【参考方案1】:

发送 data.products

getAllProducts() axios .get(http://localhost:3000/products) .then((数据) => console.log(数据类型) 控制台日志(数据) this.$store.dispatch("addAllProducts", data.products); );.

【讨论】:

以上是关于无法在对象数组中推送新对象的主要内容,如果未能解决你的问题,请参考以下文章

如何推送对象值而不是数组中对象的引用

返回推送对象的 id nodejs mongoose

如何使用 $push (Mongoose) 在数组中推送多个对象

在对象中推送唯一数组| Vuejs

如何在循环中推送对象数组中的值?

将对象数组添加到单个数组中