Правильное добавление элемента в массив объектов в React Native - PullRequest
1 голос
/ 26 апреля 2020

У меня есть массив объектов, которые я получаю из вызова API, например:

            new Promise((resolve) => {
            Kit.getSamples(FirstSample, (err, results) => {
                if (err) {
                    return resolve([]);
                }
                const newData = results.map(item => { return { ...item, name: 'FirstItem' } });
                this.setState({
                    ActivityItem: newData
                })
            })

Моя дата добавлена ​​правильно. Но затем мне нужно сделать еще один вызов API и добавить другие значения в массив, но с другим именем.

            Kit.getSamples(SecondSample, (err, results) => {
                if (err) {
                    return resolve([]);
                }
                const newData = results.map(item => { return { ...item, name: 'SecondItem' } });
                this.setState({ ActivityItem: [...this.state.ActivityItem, ...[newData]]})

Но вместо правильного добавления в массив я получаю новый массив внутри мой массив такой:

[{"name": "FirstItem", "quantity": 11, "tracked": false}, 
{"name": "FirstItem", "quantity": 21, "tracked": true},
[{"distance": 0.310685596118667, "name": "SecondItem", "tracked": false}]]

Интересно, есть ли способ добавить "SecondItem", не имея другого массива внутри?

Ответы [ 3 ]

1 голос
/ 26 апреля 2020

newData - это уже массив, как только вы получите его путем сопоставления результатов, вам не нужно переносить его в [] перед использованием синтаксиса разброса при установке состояния

this.setState({ ActivityItem: [...this.state.ActivityItem, ...newData]})
0 голосов
/ 26 апреля 2020

Вам необходимо заменить следующую строку

this.setState({ ActivityItem: [...this.state.ActivityItem, ...[newData]]})

этой строкой

this.setState({ ActivityItem: [...this.state.ActivityItem, ...newData]})
0 голосов
/ 26 апреля 2020

...[newData] заключен в массив, поэтому результат будет внутри массива.

Попробуйте удалить скобки, как показано ниже: ...newData

...