我正在使用 graphql-codegen 和 React-query 来生成这样的突变。
const [createLogMutation, {}] = useCreateLogMutation({
variables: {
data: {
logType,
message,
task
}
}
})
我想创建一个辅助函数,使用此函数处理数据库日志记录。但是,我无法在普通函数中使用钩子。实现辅助功能的好方法是什么?
我想要一个像
platformlogger.log(type, message, task)
这样更简单的方法来完成这项工作。如果没有辅助函数,我将不得不在我想要实现记录器的任何地方调用上述突变。
为了在 React.js 中使用带有 GraphQL 的 React-query 突变来简化日志记录过程,您可以创建一个封装突变逻辑的自定义钩子,然后从 heler 函数调用此钩子。我不太了解您正在工作的环境,但这里有一个示例,说明您将如何执行我正在谈论的内容:
import { useCreateLogMutation } from './yourMutationFile'; // Import your mutation hook
const useLogger = () => {
const [createLogMutation] = useCreateLogMutation();
const logToDatabase = async (logType, message, task) => {
try {
const { data } = await createLogMutation({
variables: {
data: {
logType,
message,
task
}
}
});
// Optionally, you can return the data or handle success in another way
return data;
} catch (error) {
// Handle error (e.g., log it, show a notification)
console.error('Error logging:', error);
throw error;
}
};
return logToDatabase;
};
// Helper function for simplified logging
const platformLogger = {
log: (logType, message, task) => {
const logToDatabase = useLogger(); // Initialize the logger hook
logToDatabase(logType, message, task); // Call the logger hook
}
};
export default platformLogger;
通过此设置,您现在可以在组件中的任何位置使用 platformLogger.log,通过反应查询突变将日志记录到数据库。 确保将“./yourMutationFile”替换为突变挂钩文件的正确路径。
说明:
此方法通过将突变逻辑封装在自定义挂钩中来保持关注点分离,同时提供使用 platformLogger 辅助函数进行日志记录的便捷接口。
要为 GraphQL 突变创建突变挂钩文件,通常需要遵循以下步骤:
以下是基于您提供的代码的突变挂钩文件的示例:
import { gql } from '@apollo/client';
import { useMutation } from '@apollo/client';
// Define the GraphQL mutation operation
const CREATE_LOG_MUTATION = gql`
mutation CreateLog($data: LogInput!) {
createLog(data: $data) {
id
logType
message
task
createdAt
}
}
`;
// Define the mutation hook
const useCreateLogMutation = () => {
// Execute the mutation using useMutation hook
const [createLogMutation] = useMutation(CREATE_LOG_MUTATION);
return createLogMutation;
};
export default useCreateLogMutation;
说明:
如果您使用不同的东西,请确保将 @apollo/client 替换为 GraphQL 客户端库。另外,根据您的 GraphQL 架构自定义突变操作 (CREATE_LOG_MUTATION)。