如何根据按钮点击更新反应数据table(反应数据-table-组件库)

How to update react datatable ( react-data-table-component library) based on button click

我正在使用 react-data-table-component 库从 API 获取数据并将其显示在数据 table 中。我有一个自定义日期过滤器选项,我可以在其中更新 datatable 的数据数组。我需要在更新数据时单独刷新数据table部分。

 <DataTable key={number} columns={columns} data={filteredItems} title ='SandBox ' subHeader
        subHeaderComponent={subHeaderComponentMemo} pagination
        paginationResetDefaultPage={resetPaginationToggle} nation ltr   fixedHeader  highlightOnHover responsive striped noDataComponent={"No records"}/>

这里的 filteredItems 值我可以在单击按钮时更新,但我需要在数据 table 上显示更新后的数据。我无法刷新页面,因为它将从 API.

获取新数据

    useEffect(() => {

    fetch( API_LINK)
    .then(res => res.json())
    .then(
      (result) => {
        setIsLoaded(true);
        console.log(result)
        setItems(result); 


      },
      // Note: it's important to handle errors here
      // instead of a catch() block so that we don't swallow
      // exceptions from actual bugs in components.
      (error) => {
        setIsLoaded(true);
        setError(error);
      },
    )
    } ,[currentLimitVal])

if (error) {
  return <div>Error: {error.message}</div>;
} else if (!isLoaded) {
  return <div>Loading...</div>;
} else {
// console.log(items)

if ( items.length > 0 )
{

        var te ='';
        var no_space ='';
        function myFunction(item) 
        {
            var letters = /^[A-Za-z]+$/

            if (item.indexOf(' ') <= 0 && item.indexOf(':') <= 0 && !/\d/.test(item))
            {
                te = te+'item.'+item+' && item.'+item+'.toString().toLowerCase().includes(filterText.toLowerCase()) || ';
                var sel ='row => row.'+item;
                // console.log(sel);
                columns.push(
                    {
                    name : item,
                selector:eval(sel),
                sortable: true 
                    }
                );
            }

 
        }

        // console.log(columns);
        Object.keys(items[0]).forEach(myFunction);
        columnsList = columns.length > 0
            && columns.map((item, i) => {
                if (  item.name.toLowerCase().includes('date') )
            return (
                <option key={i} value={item.name}>{item.name}</option>
            )
        }, this);

      
        te = te.slice(0, -3);
        filteredItems = items.filter(
            item => eval(te),
        );
     
        
  
}

以上是获取数据和添加过滤条件的代码。

  
        if (typeof(fromDate) == 'undefined' || typeof(toDate) == 'undefined'  )
        {
            message.error('Choose the Range Please ! ');
        }
        else if (typeof(colmunChoice) == 'undefined')
        {
            message.error('Choose the Date Column  Please ! ');
         }
        else
        {
        var Fdate = new Date(fromDate); 
        var Tdate = new Date(toDate); 
        console.log( colmunChoice);
        const format = ['DD MM YYYY', 'MM DD YYYY', 'YYYY MM DD', 'YYYY DD MM', 'MMM DD YYYY',
        'DD MMM YYYY', 'YYYY MMM DD', 'YYYY DD MMM','MM DD YY']
        const toFormat = 'YYYY MM DD';

        filtered = items.filter(a => {
            if(a[colmunChoice])
            {
            console.log( a[colmunChoice]);
            // var date = new Date(a[colmunChoice]);
            var date1  = a[colmunChoice].replace(/ +/g, '-')        
            var date =  moment(date1, format).format(toFormat);    
            var Fdate =  moment(fromDate, format).format(toFormat);    
            var Tdate =  moment(toDate, format).format(toFormat);    
            console.log( date);
             return (date >= Fdate && date <= Tdate);
            }
          });

          filteredItems =  filtered;
          console.log(filteredItems);
          
        //  I need to update data with filteredItems here 

        }


      } 

在此处处理日期范围搜索。我需要将搜索结果推送到 Data table.

道具 filteredItems 是已经获取的数据,因此您不需要刷新 api。

  const onRowDelete = row => () => {
    const rows = filteredItems.filter(item => item.id !== row.id)
    setFilteredItems(rows)
  }

假设你要删除一行,并且filteredItems一个状态,你可以使用上面的方法来刷新table。根据设计,DataTable 应该在 data 道具更改时为您刷新数据。