У меня есть функция, которая использует react-table
в качестве сетки данных. Первоначально он заполняется из Apollo в родительском компоненте через локальное состояние, где каждая строка в сетке является объектом в массиве.
Когда происходят изменения в ячейке сетки, весь объект линии записывается в состояние.
Я пытаюсь использовать useEffect для запуска мутации, которая записывает эти изменения состояния обратно в базу данных, но я борюсь с двумя основными вещами:
- мутация не записываетобратно в базу данных (хотя мутация работает на площадке graphql)
- понимание того, как отправить только измененную строку обратно в мутацию.
Основная функция (часть)
function Table2({ columns, data }) {
const [lines, setLines] = useState(data);
const [updateLine, {loading, error }] = useMutation(UPDATE_ITEM_MUTATION, {
variables:{ ...lines}
});
useEffect(() => {
updateLine
},[lines]);
const updateMyData = (rowIndex, columnID, value) => {
setLines(getLines =>
getLines.map((row, index) => {
if (index === rowIndex) {
console.log(row)
return {
...lines[rowIndex],
[columnID]: value
};
}
return row;
})
);
};
и мутация ...
const UPDATE_ITEM_MUTATION = gql`
mutation UPDATE_LINE_MUTATION(
$id: ID!,
$description: String,
$project:Int
$category:Int
$account:Int
$amt:Int
$units:String
$multiple:Int
$rate:Int
){
updateLine(
where:{id: $id},
data: {
description: $description
project: $project
category: $category
account: $account
amt: $amt
units: $units
multiple: $multiple
rate: $rate
}) {
id
description
amt
}
}
`
Буду очень признателен за несколько советов. Спасибо