我正在对多个项目进行突变。但是更新程序中的连接处理程序返回未定义。我正在处理 shopItems 类型,这是相关的架构
type Mutation {
shopItem(input: itemsInput): addedItems
}
type addedItems {
addedItems: [itemEdge]
}
type itemEdge {
cursor: Int
node: itemNode
}
type itemNode implements Node {
id: ID!,
name: String,
price: Int
}
type Root {
viewer: viewer
}
type viewer {
id: ID!
shopItems(ShopId: ID, SubCategoryId:ID, first:Int, last: Int): Item
}
type Item {
pageInfo: PageInfo
edges: [itemEdge]
}
这是 shopItems 查询的片段,
module.exports = createFragmentContainer(
Item,
graphql`
fragment item_viewer on viewer {
// the global parent viewer id
id,
shopItems(first:$first,last:$last,ShopId:$ShopId,SubCategoryId:$SubCategoryId) @connection(key: "item_shopItems",filters:["first","last"]){
// didn't want the pageInfo here yet but relay compiler enforces this because of @connection. It's basically returning null.
pageInfo {
hasNextPage
endCursor
}
edges {
cursor // returns null as well
node {
id
name
price
}
}
}
}
`
)
添加 shopItems 的突变返回 addedItems 数组,
mutation addShopItemMutation($input: itemsInput) {
shopItem(input: $input) {
addedItems {
node {
id
name
price
}
}
}
}
commitMutation(
environment,
{
...
updater: (store) => {
const payload = store.getRootField('shopItem');
//I've seen everyone using getLinkedRecord, but in my case the mutation return type is an array and it gives an error so I'm using getLinkedRecords. I think this is where the problem lies.
const newItem = payload.getLinkedRecords('addedItems');
this.sharedUpdate(store, this.props.viewerId, newItem)
}
})
sharedUpdate(store, viewerId, newItem) {
//viewerProxy here is not undefined
const viewerProxy = store.get(viewerId);
//conn is undefined
const conn = ConnectionHandler.getConnection(
viewerProxy,
'item_shopItems',
);
if(conn) {
ConnectionHandler.insertEdgeAfter(conn, newItem);
}
}
由于某种原因,连接返回未定义。此外,当我使用 console.log viewerProxy 时,我确实看到了连接键“item_shopItems”,但新的边缘没有出现在那里。以防万一,我在服务器端使用 Node Js - Express。
另一个问题是 addedItem 不是单数,而是一个数组。