#javascript #reactjs #firebase #firebase-realtime-database
#javascript #reactjs #firebase #firebase-realtime-database
Вопрос:
Я использую react JS и храню данные в состоянии в базе данных Firebase. Я пытаюсь выполнить итерацию по массиву posts и прикрепить входные данные, т.е. «ответ»: «это ответ на объект с ключом, соответствующим значению идентификатора, переданному в postAnswerHandler.
Я пытаюсь использовать оператор if, чтобы указать, соответствует ли ключ идентификатору переменной, а затем добавить данные к этому объекту.
Однако я не могу заставить этот оператор if работать.
state = {
posts: [{"key":"-MRp_IicTzCu5AineeBB",
"answer":"hhhh"},
{"key":"-MRpgKN1bFHC3pUSGoqn",
"answer":"gd"},
{"key":"-MRpkG08WrtPyW2rVKPb",
"body":"post 3",
"title":"post 3",
"type":"Credit"}]
}
postAnswerHandler = ( answer,id ) => {
const data = this.state.posts;
for (var key in data) {
if (key === id) {
*** APPEND DATA HERE***
};
var obj = data[key];
var obj_1 = JSON.stringify(obj);
for (var prop in obj) {
if(obj.hasOwnProperty(prop)){
}
}
}
const postData = JSON.stringify(this.state.posts);
Комментарии:
1. Тот факт, что вы назвали переменную ‘key’, не делает ее ключом. Вы должны перебирать объекты в массиве и получать значение для каждого ключа. Что-то вроде for (obj данных) {if (obj[‘key’] === id) {}}
2. @whats_done_is потрясающе, спасибо, это сработало! теперь имеет смысл взглянуть и на это. Теперь я думаю, что могу добавить данные к этому конкретному объекту и использовать axios.put для отправки их в базу данных.
Ответ №1:
Ваш «ключ» на самом деле является индексом массива, а не фактическим ключом, который вы ищете.
Вы должны выполнить итерацию по объектам в массиве и сравнить каждый ключ, называемый ‘key’, с идентификатором, который вы ищете.
for (const obj of data) {
if (obj['key'] === id) {
// do something with obj['answer']
}
}
Комментарии:
1. да, имеет смысл, я предполагал, что ключ был передан автоматически, а не перебирал строковое значение ‘key’ ключей.