Поиск не работает в mui-datatable, reactjs, когда значение на стороне сервера равно true?

#javascript #reactjs #mui-datatable

#javascript #reactjs #mui-datatable

Вопрос:

Привет, я внедрил mui-datatable в свой проект. Все работает хорошо, но панель поиска не работает, когда я включаю значение на стороне сервера: true в параметрах.

 const options = {
    filter: true,
    count: state.count,
    rowsPerPage: state.rowsPerPage,
    serverSide: true,
}
 

Если вы хотите получить какие-либо разъяснения по этой проблеме, пожалуйста, не стесняйтесь спрашивать.

Пожалуйста, помогите мне.

С уважением

Ответ №1:

Здесь я привожу некоторый код, чтобы он был концептуально понятным.

Здесь я объявляю некоторые states , чтобы мы могли использовать их для paging or data loading

 const [data, setData] = useState(carStocks);
const [page, setPage] = useState(0);
const [total, setTotal] = useState(0);
 

Определите свой метод, который будет вызывать api и устанавливать данные с помощью setData

 function changePage(newTableState) {
    let state = {
        ...tableState, ...newTableState,
        pageNo: newTableState.page   1,
        pageSize: newTableState.rowsPerPage,
        searchText: newTableState.searchText
    };
    setTableState(state);
    // CALL API with state parameter
    // setData(data);
    // setPage(page);
    // setTotal(total);
}
 

Здесь вы объявляете свой columns

 const columns = [
   {
        name: 'name',
        label: 'Name',
        options: {
            filter: false,
            sort: false,
            viewColumns: true
        }
    },
    {
        name: 'title',
        label: 'TITLE',
        options: {
            filter: false,
            sort: false,
            viewColumns: true
        }
    },
];
 

Здесь вы объявляете свой options . В параметрах, которые вы должны использовать serverSide: true , и если вы используете serverSide: true , вы должны связать count, page, rowsPerPage со значением, основанным на размере данных, найденных из api.

 const options = {
        serverSide: true,
        count: total,
        page: page,
        rowsPerPage: tableState.pageSize,
        selectableRows: 'multiple',
        searchText: tableState.searchText,
        searchPlaceholder: 'Type Car Title to Search',
        textLabels: {
            body: {
                noMatch: loading ?
                    <CircularProgress color='secondary' size={40} /> :
                    'SORRY_THERE_IS_NO_MATCHING_DATA_TO_DISPLAY'
            }
        },
        onTableChange: (action, newTableState) => {
            switch (action) {
                case 'changePage':
                case 'changeRowsPerPage':
                    changePage(newTableState);
                    break;
                case 'search':
                    changePage(newTableState);
                    break;
                case 'filterChange':
                    handleFilterSubmit(newTableState.filterList);
                    break;
            }
        }
    };
 

Наконец, вы можете использовать data , columns и options

 <MUIDataTable data={data} columns={columns} options={options} />
 

Подробнее

Комментарии:

1. Почему вы вызываете функцию changePage в обоих случаях changeRowsPage и search.

2. Как вы видите changePage , получает newTableState в качестве параметра. поэтому вы должны подготовиться newTableState со всеми критериями, например, поисковое слово, информация о подкачке (pageNo и pageLimit), критерии фильтрации и так далее. So newTableState будет содержать все входные данные и передавать их в changePage функцию.