Современный ретранслятор ретрансляции ConnectionHandler.getConnection () возвращает неопределенное значение, когда родительская запись равна root - PullRequest
0 голосов
/ 02 марта 2020

Обновление отладки:

Итак, мы пошли немного дальше в отладке, и похоже, что 'client: root' не может вообще получить доступ к соединению.

Для отладки всего хранилища мы добавили эту строку в функцию обновления после экспорта переменной хранилища из реле / ​​среды.

console.log(relayEnvStore.getSource().toJSON())

Если я использую .get() с указанными c строка client:root:__ItemList_items_connection, я могу получить доступ к записям, которые искал, но это определенно не красиво.

const testStore = store.get('client:root:__ItemList_items_connection')

console.log(testStore.getLinkedRecords('edges'))

Оригинал:

Я используя Relay Modern и пытаясь обновить кеш после завершения мутации updateItem с помощью средства обновления. Вызов ConnectionHandler.getConnection('client:root', 'ItemList_items') возвращает неопределенное значение.

Я не уверен, что это потому, что я пытаюсь использовать 'client: root' в качестве родительской записи или есть проблема с моим кодом. Кто-нибудь сталкивался с подобной проблемой?

Вот paginationContainer:

const ItemListPaginationContainer = createPaginationContainer(
  ItemList,
  {
    node: graphql`
      fragment ItemList_node on Query
        @argumentDefinitions(count: { type: "Int", defaultValue: 3 }, cursor: { type: "String" }) {
        items(first: $count, after: $cursor) @connection(key: "ItemList_items") {
          edges {
            cursor
            node {
              id
              name
            }
          }
          pageInfo {
            hasNextPage
            hasPreviousPage
            startCursor
            endCursor
          }
        }
      }
    `
  },
  {
    direction: 'forward',
    getConnectionFromProps: props => props.node && props.node.items,
    getVariables(props, { count, cursor }) {
      return {
        count,
        cursor
      }
    },
    query: graphql`
      query ItemListQuery($count: Int!, $cursor: String) {
        ...ItemList_node @arguments(count: $count, cursor: $cursor)
      }
    `
  }
)

Вот мутация:

const mutation = graphql`
  mutation UpdateItemMutation($id: ID!, $name: String) {
    updateItem(id: $id, name: $name) {
      id
      name
    }
  }
`

Вот обновитель:

updater: (store) => {
  const root = store.getRoot()
  const conn = ConnectionHandler.getConnection(
    root, // parent record
    'ItemList_items' // connection key
    )

  console.log(conn)
},

1 Ответ

0 голосов
/ 27 марта 2020

Оказывается, я неправильно настраивал свою среду. Хранилище сбрасывало себя каждый раз, когда я делал запрос или мутацию, поэтому я не мог получить доступ ни к одному из соединений. Изначально у меня было следующее:

export default server => {
  return new Environment({
    network: network(server),
    store: new Store(new RecordSource())
  })
}

Все изменения доступны с этим изменением:

const storeObject = new Store(new RecordSource())

export default server => {
  return new Environment({
    network: network(server),
    store: storeObject
  })
} 
...