عند العمل مع GraphQL، يمكنك تمرير الوسيطات (arguments) من الاستعلام الرئيسي إلى الوظائف الفرعية (sub-resolvers) باستخدام السياق (context) في GraphQL. لكن في مثالك، يبدو أنه تم تعريف الوسيطات في الاستعلام الرئيسي فقط ولم يتم تمريرها إلى الوظائف الفرعية.
لحل هذه المشكلة، يمكنك تمرير الوسيطات من الاستعلام الرئيسي إلى الوظيفة الفرعية resolve
لكائن UserType
بواسطة السياق (context) كما يلي:
javascriptconst UserType = new GraphQLObjectType({
name: 'User',
fields: () => ({
name: {
type: GraphQLString
},
posts: {
type: new GraphQLList(PostType),
resolve(parent, args, context) {
// يمكنك الآن الوصول إلى الوسيطات الممررة من الاستعلام الرئيسي هنا
const { someBooleanArg } = context;
return someLogicToGetUserPosts(parent.id, someBooleanArg); // قم بتمرير الوسيطات إلى الدالة المناسبة
}
}
})
});
const queryType = new GraphQLObjectType({
name: 'RootQuery',
fields: {
users: {
type: new GraphQLList(UserType),
args: {
id: {
type: GraphQLInt
},
someBooleanArg: {
type: GraphQLInt
}
},
resolve(root, { id, someBooleanArg }, context) {
// يمكنك تمرير الوسيطات إلى السياق (context) هنا
return someLogicToGetUsers(id, someBooleanArg, context);
}
}
}
});
بعد ذلك، في دالة الحل (resolve
) لكائن UserType
، يمكنك الوصول إلى الوسيطات الممررة من الاستعلام الرئيسي عبر السياق (context
) واستخدامها في منطقك للحصول على مشاركات المستخدم بشكل صحيح.
تأكد أن تقوم بتحديث دوالك (someLogicToGetUserPosts
و someLogicToGetUsers
) لتقبل الوسيطات الجديدة التي تم تمريرها إليها. بعد ذلك، ستتمكن من استخدام الوسيطات في الاستعلامات الفرعية بنجاح والحصول على النتائج المرجوة.
المزيد من المعلومات
عند العمل مع GraphQL، يُعتبر تمرير الوسيطات (arguments) من الاستعلام الرئيسي إلى الوظائف الفرعية (sub-resolvers) ضروريًا لتمكين الاستعلامات الفرعية من إجراء الاستعلامات بشكل صحيح وفقًا للمتطلبات المحددة. في المثال الذي قدمته، يبدو أن هناك خطأ في تمرير الوسيطات من الاستعلام الرئيسي إلى وظيفة فرعية لكائن UserType
.
لحل هذه المشكلة، يمكن تمرير الوسيطات من الاستعلام الرئيسي إلى وظيفة الحل (resolve
) لكائن UserType
باستخدام السياق (context). هناك خطوتان رئيسيتان:
- تمرير الوسيطات من الاستعلام الرئيسي إلى السياق.
- استخدام الوسيطات الممررة في وظيفة الحل (
resolve
) لكائنUserType
.
أولاً، في تعريف الاستعلام الرئيسي queryType
، يمكنك تمرير الوسيطات إلى السياق (context) كما يلي:
javascriptconst queryType = new GraphQLObjectType({
name: 'RootQuery',
fields: {
users: {
type: new GraphQLList(UserType),
args: {
id: {
type: GraphQLInt
},
someBooleanArg: {
type: GraphQLInt
}
},
resolve(root, { id, someBooleanArg }, context) {
return someLogicToGetUsers(id, someBooleanArg, context); // تمرير الوسيطات إلى دالة الحل
}
}
}
});
ثانياً، في دالة الحل (resolve
) لكائن UserType
، يمكنك الوصول إلى الوسيطات الممررة من الاستعلام الرئيسي عبر السياق (context
) واستخدامها في منطقك للحصول على مشاركات المستخدم بشكل صحيح. فمثلاً:
javascriptconst UserType = new GraphQLObjectType({
name: 'User',
fields: () => ({
name: {
type: GraphQLString
},
posts: {
type: new GraphQLList(PostType),
resolve(parent, args, context) {
const { someBooleanArg } = context; // الوصول إلى الوسيطات الممررة من الاستعلام الرئيسي هنا
return someLogicToGetUserPosts(parent.id, someBooleanArg); // استخدام الوسيطات في الدالة المناسبة
}
}
})
});
من خلال هذه الخطوات، يمكنك الآن تمرير الوسيطات بنجاح من الاستعلام الرئيسي إلى الوظائف الفرعية في GraphQL، والحصول على النتائج المتوقعة بناءً على الوسيطات الممررة. تأكد من تحديث دوالك (someLogicToGetUserPosts
و someLogicToGetUsers
) لتقبل الوسيطات الجديدة التي تم تمريرها إليها، وستكون قادرًا على استخدام الوسيطات بنجاح في الاستعلامات الفرعية.