typescript - Hur kan jag implementera PrimeReact DataTable med lat inladdning


Jag skulle vilja visa data i PrimeReact (v9.3.1) DataTable med lazy load. Koden är här:

const [questionAnswerValues, setQuestionAnswerValues] = useState([]);
const [editedRow, setEditedRow] = useState<any>({});
const [selectedRow, setSelectedRow] = useState<any>({});
const [lazyLoading, setLazyLoading] = useState(false);

useEffect(() => {
    fetchRange(0,20);
}, []);

const fetchRange = (first: number, last: number) => {
    fetch(`/api/questionanswer/slice?first=${first}&last=${last}`).then((response) => response.json()).then(data => {
        console.log(data);
        data = [...questionAnswerValues, data];
        //setQuestionAnswerValues(data); //generate infinite render requests !!!
        setLazyLoading(false);
    });
}
const loadQuestionAnswerLazy = (event: any) => {
    console.log(JSON.stringify(event));
    let { first, last } = event;
    if (last !== 0) {
        fetchRange(first, last);
    }
}

Datatabellen ser ut så här:

        <DataTable value={questionAnswerValues} responsiveLayout="scroll" selectionMode="single" selection={selectedRow}
            onSelectionChange={(e) => setSelectedRow(e.value)} scrollable scrollHeight="400px"
            virtualScrollerOptions={{ lazy: true, onLazyLoad: loadQuestionAnswerLazy, itemSize: 46, delay: 200, showLoader: true, loading: lazyLoading }}
            tableStyle={{ minWidth: '50rem' }}>
            <Column selectionMode="single" header="Select one"></Column>
            <Column field="_id" header="ID"></Column>
            <Column field="question_id.question" header="Question"></Column>
            <Column field="answer" header="Answer"></Column>
            <Column field="isCorrect" header="IsCorrect"></Column>
        </DataTable>

Första frågan är: Hur ska jag uppdatera datavärden utan oändlig rendering.

Andra frågan är: Att lägga till som data=[...questionAnswerValues, data] är inte användbart. Hur kan jag lägga till data till questionAnswerValues?

Tredje frågan: finns det någon React-datatable-implementation som kan visa poster som läggs till utan att dölja redan laddade poster?

Svar #1

Jag har ett fullt fungerande komplett PrimeReact Lazy Datatable-exempel som använder en riktig REST-tjänst och en PostgresQL-databas.

Projekt: https://github.com/melloware/quarkus-monorepo

Lazty DataTable-sidan specifikt om du bara vill titta på PrimeReact-koden: https://github.com/melloware/quarkus-monorepo/blob/main/src/main/webui/src/CrudPage.tsx