在Apollo GraphQL中,可以使用useMutation
钩子来执行突变(mutation)操作。以下是一个简单的示例代码,展示了如何在列表中的每个项目上加载进行突变。
首先,我们需要定义一个GraphQL mutation,并在Apollo客户端中配置它。假设我们有一个名为updateItem
的mutation,它接受一个id
参数和一个newName
参数,用于更新列表中的项目的名称。
import { gql } from '@apollo/client';
// 定义mutation
const UPDATE_ITEM_MUTATION = gql`
mutation UpdateItem($id: ID!, $newName: String!) {
updateItem(id: $id, newName: $newName) {
id
name
}
}
`;
// 配置Apollo客户端
const client = new ApolloClient({
// ...其他配置
cache: new InMemoryCache(),
link: new HttpLink({
uri: 'your-graphql-endpoint',
headers: {
// 可选的身份验证头部
},
}),
});
接下来,在列表组件中,我们可以使用useMutation
钩子来执行突变。我们可以将updateItem
mutation绑定到列表项的操作按钮上,并将该项的id
和新的名称作为参数传递给mutation。
import { useMutation } from '@apollo/client';
const ListItem = ({ item }) => {
// 定义mutation钩子
const [updateItem] = useMutation(UPDATE_ITEM_MUTATION);
const handleUpdateItem = () => {
// 执行mutation
updateItem({
variables: {
id: item.id, // 列表项的id
newName: 'New Name', // 新的名称
},
})
.then(() => {
// mutation成功后的处理逻辑
console.log('Item updated successfully');
})
.catch((error) => {
// mutation失败后的处理逻辑
console.error('Failed to update item', error);
});
};
return (
{item.name}
);
};
const List = ({ items }) => {
return (
{items.map((item) => (
))}
);
};
const App = () => {
const items = [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
{ id: 3, name: 'Item 3' },
];
return
;
};
在上述代码中,我们首先在ListItem
组件中定义了updateItem
mutation钩子。然后,在handleUpdateItem
函数中,我们调用updateItem
执行mutation,并传递列表项的id
和新的名称作为参数。最后,我们将handleUpdateItem
绑定到列表项的更新按钮上。
这样,当用户点击列表项的更新按钮时,将会执行相应的mutation,并在mutation成功后进行处理。可以根据具体的需求进行进一步的处理,例如更新列表的状态、刷新数据等。