Как передать параметр функции во внешнюю функцию? - PullRequest
0 голосов
/ 20 января 2019

Это моя функция (класса реагирующего компонента), которая вызывает мутацию apollo / graphQL (doSomething()).

example.js

example (id) {
  const { elementID, doSomething } = this.props

  return doSomething({
    variables: { id },
    update: (proxy, { data: { getData } }) => {
      const data = proxy.readQuery({
        query: getDataQuery,
        variables: { elementID }
      })
      // ...do something...
      proxy.writeQuery({
        query: getDataQuery,
        variables: { elementID },
        data
      })
    }
  })
}

Мне нужно получить функцию обновления в отдельном файле, но теперь я потерял контекст для elementID: Как видите, вызов мутации становится очень читабельным, когда я помещаю функцию обновления в другой файл. Но elementID больше не определяется.

example.js

import { update } from './update.js'

example (id) {
  const { elementID, doSomething } = this.props

  return doSomething({
    variables: { id },
    update: update
}

update.js

export const update = (proxy, { data: { getData } }) => {
  const data = proxy.readQuery({
    query: getDataQuery,
    variables: { elementID } // <-- not defined
  })
  // ...do something...
  proxy.writeQuery({
    query: getDataQuery,
    variables: { elementID }, // <-- not defined
    data
  })
}

1 Ответ

0 голосов
/ 20 января 2019

Попробуйте следующее:

example.js

import { update } from './update.js'

example (id) {
  const { elementID, doSomething } = this.props

  return doSomething({
    variables: { id },
    update: update(id, elementID) // <-- change this
}

update.js

export const update = (id, elementID) => { // <-- change this
  return (proxy, { data: { getData } }) => { // <-- change this
    const data = proxy.readQuery({
      query: getDataQuery,
      variables: { elementID }
    })
    // ...do something...
    proxy.writeQuery({
      query: getDataQuery,
      variables: { elementID },
      data
    })
  }
} // <-- change this
...