Как передать переменные данные в createFragementContainer

Я использую Relay Modern для создания своего компонента и хочу передать переменную во фрагмент, чтобы ее можно было использовать в качестве аргумента GraphQL в моем запросе.

Вот код, который я использую:

class Test extends Component {
    static propTypes = {
       userId: PropTypes.string.isRequired
    }

    render = () => {

        return (

            <p>User Id: {this.props.userId}</p>
            <p>User name: {this.props.viewer.name}
        );
    }
}

export default createFragmentContainer(
    Test,
    graphql`
        fragment Test_viewer on Viewer {
            user(id: $userId) { <<=== The $userId must be the this.props.userId passed
                id
                name
            }
        }
    `
);

При выдаче запроса сервер GraphQL возвращает ошибку Variable \"$userId\" is not defined by operation \"UserQuery\".".

Мой запрос в родительском компоненте:

const UserQuery = graphql` 

  query AdminQuery {
    viewer {
      ...Test_viewer
    }
  }
`

Как я могу заставить код выше работать?


person Mendes    schedule 25.10.2017    source источник


Ответы (1)


Вам нужно передать свою переменную на уровне запроса:

const UserQuery = graphql` 
  query AdminQuery($userId: ID!) {
    viewer {
      ...Test_viewer
    }
  }
`;

При использовании этого запроса к элементу <QueryRenderer /> вы также будете передавать переменные как свойство:

<QueryRenderer
  query={UserQuery}
  variables={{
    userId: 'USER_ID',
  }}
  // ... others props
/>
person yachaka    schedule 25.10.2017