Reactjs - добавить объект к объекту

Я пытаюсь добавить объект к подобъекту, но у меня есть ошибки, некоторые могут мне помочь? это мой код, спасибо: Замечания: я использовал "push" и получил сообщение об ошибке: "push не определен".

if (this.state.upd != '' && this.state.image1 == ''){
  cadastro.imagens.push({1:this.state.img[1]?this.state.img[1]:""});
}else {
   cadastro.imagens.push({1:this.state.image1});
}

И если я так использую, то подписываюсь на остальных

if (this.state.upd != '' && this.state.image2 == ''){
  cadastro.imagens = {2:this.state.img[2]?this.state.img[2]:""};
}else {
   cadastro.imagens = {2:this.state.image2};
}

Пожалуйста, поделитесь с нами всем своим состоянием и данными cadastro. Кроме того, если вы немного подробнее объясните, что вы пытаетесь здесь сделать, будет лучше.

devserkan 19.09.2018 18:47

let cadastro = {imagens: {0: '', 1: '', 2: '', 3: '',}, lat: ''} Кадастро - это что-то вроде этого

Jader Costa 19.09.2018 18:50

Код слишком велик, чтобы поместить здесь, но основное, что я пытаюсь сделать, это то, что у пользователя уже есть изображение и не выбирает другое, я возьму загруженное старое изображение, иначе я получу новое изображение и установлю новый объект

Jader Costa 19.09.2018 18:57

Я прошу подробностей, потому что не знаю, где находится cadastro? Если он находится в состоянии, то присвоение некоторых свойств означает, что вы изменяете состояние, и вам не следует этого делать. В остальном манипулировать объектами не так уж и сложно.

devserkan 19.09.2018 19:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
1 026
3

Ответы 3

let cadastro = { imagens:{0:'', 1:'',2:'',3:'', },lat:''} 

Из этого мы видим, что типы изображений в объекте и объекте не имеют метода .push () Но добиться желаемого результата можно

cadastro.imagens[1] = this.state.img[1]?this.state.img[1]:"";


Итак, ваш код будет выглядеть так

if (this.state.upd != '' && this.state.image1 == ''){
  cadastro.imagens[1] = this.state.img[1]?this.state.img[1]:""
}else {
   cadastro.imagens[1] = this.state.image1
}

@JaderCosta рад это слышать. Если этот ответ помог вам, вы также можете принять этот ответ :-)

Rajan Lagah 19.09.2018 19:11

Push работает только с массивом, но не с объектом. Вы можете переопределить значение ключа объекта, используя нотацию ., за которой следует имя ключа. Что-то вроде ниже

const cadastro = { imagens:{0:'', 1:'',2:'',3:'', },lat:''};

//ovverride key value using .notation
cadastro.imagens.1 = this.state.img[1]?this.state.img[1]:"";


if (this.state.upd != '' && this.state.image1 == ''){
  cadastro.imagens.1 = this.state.img[1]?this.state.img[1]:"";
}else {
   cadastro.imagens.1 = this.state.image1;
}

Хорошо, поэтому у меня нет особого представления о том, какую структуру данных вы используете. Но я предполагаю, что вы создаете объект imagens, который должен содержать массив изображений, загруженных пользователем. (В этом случае я предполагаю, что пользователь загружает два изображения)

Вот предложение, потому что я чувствую, что то, как вы его назначаете, плохо смотрится в части программирования.

Вы можете ввести свой объект в массив, например -

cadastro.imagens = []

а затем вы можете вставить в него свои ценности, например:

cadastro.imagens.push(this.state.img[1]?this.state.img[1]:"");

если вы не создаете этот объект, и он уже присутствует, вы можете сделать - (что опять же мне не нравится, но в любом случае)

cadastro.imagens[1] = this.state.img[1]?this.state.img[1]:"";

Другие вопросы по теме