Я начал с relay-starter-kit
, а также проработал путь через документацию Relay и GraphQL. Но есть немало областей, которые необъяснимы и таинственны.
Серьезно я читал много документов по всему миру обо всех этих вещах, но не смог найти удовлетворительных объяснений по следующим вопросам:
Для чего это? Я помещаю журнал, но он даже не вызван вообще:
var {nodeInterface, nodeField} = nodeDefinitions(
(globalId) => {
var {type, id} = fromGlobalId(globalId);
if (type === 'User') {
return getUser(id);
} else if (type === 'Widget') {
return getWidget(id);
} else {
return null;
}
},
(obj) => {
if (obj instanceof User) {
return userType;
} else if (obj instanceof Widget) {
return widgetType;
} else {
return null;
}
}
);
И каков фактический эффект этого:
interfaces: [nodeInterface],
Возможно, это связано с тем, что здесь делает поле node
:
var queryType = new GraphQLObjectType({
name: 'Query',
fields: () => ({
node: nodeField,
// Add your own root fields here
viewer: {
type: userType,
resolve: () => getViewer(),
},
}),
});
А что такое волшебство вокруг поля id
? Что такое globalIdField
для?
У меня есть id
в моей базе данных и я думал, что могу использовать его в своих объектах GraphQL:
Вместо:
id: globalIdField('User'),
Я хочу использовать идентификатор моей базы данных:
id: {
type: GraphQLID,
description: 'The identifier'
},
Но если я это сделаю, я получаю сообщение об ошибке в браузере, говоря RelayQueryWriter: Could not find a type name for record '1'
.
Я могу избавиться от этой ошибки, добавив __typename
в мои контейнеры компонентов Relay Query, но это кажется неправильным.
Было бы здорово, если бы вы могли дать более глубокие внутренности и лучшее объяснение здесь и улучшить официальную документацию.
Спасибо