У меня есть массив в React с документами, которые сами являются массивом (изначально я делаю группу по полю в исходном массиве, каждый из документов затем будет сгруппирован в один документ, и у каждого документа есть массивагрегированного поля).
Теперь я хотел бы узнать, как я могу отслеживать подгруппированные массивы (сгруппированного массива) в реакции?Потому что, когда я выполняю операцию с базой данных, а затем выполняю операцию манипуляции со списком, чтобы вырезать некоторые документы из моего исходного массива документов, я не получаю нужные документы обратно, потому что они сгруппированы с разными индексами, такими как arr [a] [index] - такого рода массивы ... и ключи неверны для отслеживания правильных документов ...
вот мой код:
import React from 'react';
import Anzeige from '../pages/gebuchte-stellenanzeigen';
const anzeigenArray = (props) => {
let style;
if (props.aussehen != null) {
style = props.aussehen;
}else {
style = {};
}
let docs = props.anzeigenArray;
//console.log("Alle Docs:", docs);
const filterByDay = (entr, idx) => {
const dayInMilliseconds = 24*60*60*1000;
let now = new Date().getTime();
let previous = idx;
let next = idx+1;
let datenow = now - (previous*dayInMilliseconds);
let datethen = now - (next*dayInMilliseconds);
let arr = entr.filter((anzeige) => {
let anzeigeDate = new Date(anzeige.createdtimestamp).getTime();
return ( anzeigeDate > datethen && anzeigeDate < datenow )
});
return arr;
}
let filteredArray = [];
for (let i = 0; i<7; i++) {
let result = filterByDay(docs,i);
let doc = {
'day': i,
'docs': [...result]
}
filteredArray.push(doc);
}
//console.log("Filtered Array:", filteredArray);
return (
<div>
{
filteredArray.map((test,testindex) => {
return (
<div key={testindex}>
<h3><p>Tag: {test.day+1}</p></h3>
{
test.docs.map((anzeige,index) => (
<li className="mainList" key={testindex+"." + index} style={style} >
<Anzeige
finished = {props.finished}
anzeige={anzeige}
index={index}
onClickalert={() => props.onClickAlert()}
onButtonfinish={props.onButtonFinish}
unDone = {props.onUndone}
/>
</li>
))
}
</div>
)
})
}
</div>
)
}
export default anzeigenArray;
В приведенной выше функцииЯ группирую по функции «filterByDay» по разным дням недели, а затем в своей функции возврата я отображаю список, сгруппированный по идентификаторам документов, а затем по дням соответственно.
Но если я делаюзапрос http, чтобы закончить какой-то документ в списке и заставить его исчезнуть из списка, я не получаю правильный индекс ранее обработанного документа, вот моя функция:
processDocumentArray = (index) => {
let alleAnzeigenNew = [...this.state.alleAnzeigen];
let doc = alleAnzeigenNew.splice(index,1);
doc = doc[0];
let anzeigenFinishedArr = [...this.state.anzeigenFinished || null,doc]
this.setState({
anzeigenFinished: anzeigenFinishedArr,
alleAnzeigen: alleAnzeigenNew
});
}
в качестве обходного пути,Я всегда делаю новый http-запрос для извлечения после каждой обработки документа, который возвращает мне все документы из базы данных иru он будет вновь сгруппирован и загружен в соответствующий сгруппированный список.Но почему-то не получается обновить список вручную с помощью индексов документов ...
РЕДАКТИРОВАТЬ: Я помню, что documentID уникален, поэтому я мог просто сделать массив vanilla javascript.Метод find (), чтобы найти элемент с docID или выполнить операцию .indexOf (), чтобы найти соответствующий индекс документа, я прав?это облегчило бы поиск соответствующего документа ... но нет ли способа извлечь правильные ключи в реакции и использовать их в качестве индекса для подгруппированных массивов массивов?