Реагируйте, как отслеживать ключи в списке подгруппированного массива массивов? - PullRequest
0 голосов
/ 01 июля 2019

У меня есть массив в 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 (), чтобы найти соответствующий индекс документа, я прав?это облегчило бы поиск соответствующего документа ... но нет ли способа извлечь правильные ключи в реакции и использовать их в качестве индекса для подгруппированных массивов массивов?

...