В Material React Table порядок колонок может меняться в зависимости от изменений в состоянии компонента, и иногда это поведение может показаться неожиданным, особенно если часть колонок зависит от динамических данных, как в вашем случае с переменной `type`.
Проблема может возникнуть из-за того, что каждый раз при изменении переменной `type` создается новый массив колонок, и React может воспринимать это как новое состояние. Если порядок колонок не установлен явно, React может менять их местами.
Чтобы гарантировать, что порядок остается фиксированным, даже при изменении переменной, вы можете воспользоваться следующими подходами:
1. **Установить фиксированный порядок колонок с использованием `columnsOrder`:**
Убедитесь, что `columnsOrder` задан корректно и не меняется при изменении колонок. Он должен ссылаться на индексы колонок, которые вы хотите зафиксировать.
Пример:
```javascript
const columns = useMemo(() => [
{ header: "typeID", accessorKey: `${type}Id` },
{ header: "ID", accessorKey: "Id" }
], [type]);
const columnsOrder = [0, 1]; // здесь фиксируем порядок колонок
return (
<MaterialReactTable
columns={columns}
columnsOrder={columnsOrder} // передаем порядок
data={data}
/>
);
```
2. **Не изменять массив колонок при каждом рендере:**
Вам не нужно пересоздавать массив колонок с каждым изменением переменной `type`. Вместо этого можно сохранить первоначальное состояние колонок и только менять значимые части.
Пример:
```javascript
const initialColumns = useMemo(() => [
{ header: "typeID", accessorKey: "typeId" }, // учитываем, что typeId должен быть статическим
{ header: "ID", accessorKey: "Id" }
], []);
const columns = useMemo(() => {
return initialColumns.map(col => {
if (col.header === "typeID") {
return { ...col, accessorKey: `${type}Id` }; // меняем только accessorKey
}
return col;
});
}, [type, initialColumns]);
return (
<MaterialReactTable
columns={columns}
data={data}
/>
);
```
3. **Использование одного и того же массива колонок:**
Если вы не хотите, чтобы порядок менялся, просто создайте колонки один раз и используйте их повторно.
С помощью одного из этих подходов вы сможете сохранять желаемый порядок колонок в вашей таблице независимо от изменений, связанных с переменной `type`.