Tôi bắt đầu với relay-starter-kit
và cũng đã làm việc theo cách của tôi thông qua tài liệu Relay và GraphQL. Nhưng có một vài khu vực không giải thích được và bí ẩn.Trong Relay, giao diện nút và thông số ID toàn cầu đóng vai trò gì?
Nghiêm túc tôi đọc rất nhiều tài liệu ở khắp mọi nơi về tất cả những điều này, nhưng không thể tìm thấy bất kỳ lời giải thích thỏa mãn cho các câu hỏi sau:
đây là cái gì? Tôi đặt đăng nhập nhưng nó không bao giờ thậm chí được gọi tại tất cả:
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;
}
}
);
Và hiệu quả thực tế của việc này là gì:
interfaces: [nodeInterface],
lẽ liên quan đến đó, những gì hiện các lĩnh vực node
đây làm:
var queryType = new GraphQLObjectType({
name: 'Query',
fields:() => ({
node: nodeField,
// Add your own root fields here
viewer: {
type: userType,
resolve:() => getViewer(),
},
}),
});
Và phép thuật xung quanh trường id
là gì? globalIdField
là gì?
Tôi có một id
trong cơ sở dữ liệu của tôi và nghĩ rằng tôi có thể sử dụng nó trong các đối tượng GraphQL tôi:
Thay vì:
id: globalIdField('User'),
Tôi muốn sử dụng id cơ sở dữ liệu của tôi:
id: {
type: GraphQLID,
description: 'The identifier'
},
Nhưng nếu tôi làm như vậy, tôi gặp lỗi trong trình duyệt nói rằng RelayQueryWriter: Could not find a type name for record '1'
.
Tôi có thể loại bỏ lỗi đó bằng cách thêm __typename
vào bộ chứa thành phần của tôi Truy vấn chuyển tiếp nhưng dường như tất cả đều sai.
Thật tuyệt vời nếu bạn có thể đưa ra một số nội dung sâu hơn và giải thích rõ hơn ở đây và nâng cao tài liệu chính thức.
Cảm ơn bạn
Hy vọng rằng điều này sẽ làm theo cách của mình vào các hướng dẫn sớm. Tôi cũng bị bối rối bởi điều này trong một thời gian cho đến khi tôi cuối cùng đã làm việc thông qua tất cả mọi thứ và đặt các mảnh lại với nhau. –
Có thể thêm một chút nữa vào câu trả lời này liên quan đến 'fromGlobalId' và' toGlobalId'? và cách chúng tạo điều kiện thuận lợi cho việc tìm nạp lại bất kỳ loại đối tượng nào? Đọc https://github.com/graphql/graphql-relay-js/blob/master/src/node/node.js và các tệp khác trong repo đó đã giúp tôi rất nhiều, nhưng việc chưng cất nội dung đó thành các từ sẽ giúp tôi tiết kiệm rất nhiều thời gian. –
Đối với một ngắn gọn (bạn có thể bỏ qua đến cuối cho bản tóm tắt) & giải thích mã minh họa về những gì nodeInterface bí ẩn, nodeField, globalFieldId, có lẽ https://medium.com/p/relay-graphql-de-mystifying- node-id-38757121b9c – nethsix