В Relay какую роль играют интерфейс узла и спецификация глобального идентификатора?
Я начал с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, но это кажется неправильным.
Было бы здорово, если бы вы могли дать более глубокие подробности и более подробное объяснение здесь и улучшить официальную документацию.
Спасибо