Mam określony obiekt:

import React, { Component } from 'react';
import './App.css';

class App extends Component {

  constructor() {
    super();
    this.state = {
    lists: ["Dogs", "Cats"],
    items: {Dogs:[], Cats:[]}
    };
  }

  handleAddItem(item) {
    console.log(item);
  }

Mam zmienną

console.log(item);// output {Dogs:[{name: "lofi"}]}  

Nie wiem, jak zweryfikować, która właściwość jest w item (Dogs lub Cats lub Cats), dzięki czemu mogę zaktualizować przedmioty obiektów {} :

items{Dogs:[{name: "lofi"}], Cats:[]}
0
E.Mohammed 5 czerwiec 2018, 04:40

3 odpowiedzi

Najlepsza odpowiedź
const item = {Dogs:[{name: "lofi"}]}
let whichAnimal = Object.keys(item)[0]; //Dogs
let animalObj = item[whichAnimal][0]; //{name:'lofi'}

this.setState({ 
  items: this.state.items[whichAnimal].push(animalObj)
})

Możesz użyć Object.keys, aby uzyskać wszystkie klucze i zakładając, że item ma tylko jedną zmienną na raz, ustawiamy wskaźnik 0. przechowywanie go w zmiennej, tak że podczas setState Dowiedz się, który macierzy się w dokładnie pchamy przedmiot

1
Isaac 6 czerwiec 2018, 07:15

Ponieważ jest to aplikacja reagująca, której chcesz użyć setstate.

import React, { Component } from 'react';
import './App.css';

class App extends Component {

    constructor() {
        super();
        this.state = {
            lists: ["Dogs", "Cats"],
            items: {Dogs:[], Cats:[]}
        };
    }

    handleAddItem(item) {
        console.log(item);
        var copy = JSON.parse(JSON.stringify(this.state.items));
        copy["Dogs"].push({name: "lofi"}];
        this.setState({items: copy});
    }
}

W reakcji nie próbuj bezpośrednio zmieniać stanu. Ponadto zawsze najlepszą praktyką, aby najpierw skopiować obiekt, ponieważ jeśli zmienisz oryginalny obiekt stanowy, może sprawić, że Twoja aplikacja zachowuje nieprzewidywalna.

0
Luke101 5 czerwiec 2018, 03:06

Kiedy dodajesz "LOFI" do elementów.dog, powinieneś zrobić to:

this.state.items.Dogs.push({name:'lofi'})

Wyjście konsoli pokazuje, że wykonałeś koty znika, więc zastanawiałem się, że zastępujesz przedmioty , jak:

this.state.items = {Dogs:[{name:'lofi'}]}

Jeśli myślę, że nie tak, daj mi znać.


Edytować:

Podaj wartości jako parametr jest jak poniżej:

Dodaj kategorię:

var new_category = 'Birds';
this.state.items[new_category] = [];

Dodaj element do kategorii:

var category = 'Birds';
var new_item = 'dori';
this.state.items[category].push({name: new_item });
1
Terry Wei 5 czerwiec 2018, 02:22