中继 - 在查询之前设置变量

Chr*_*ris 7 reactjs graphql relayjs

我目前正在处理一个页面,该页面显示特定用户的某组"任务"的状态.要获取数据,我有以下中继容器:

export default Relay.createContainer(TaskReview, {
  initialVariables: {
    limit: Number.MAX_SAFE_INTEGER,
    studentId: null,
  },
  fragments: {
    task: () => Relay.QL`
      fragment on Task {
        id,
        title,
        instruction,
        end_date,
        taskDataList(first: $limit, type: "subTasks", member: $studentId) {
          edges {
            node {
              id,
              answer,
              completion_date,
            }
          }
        },
        ...
Run Code Online (Sandbox Code Playgroud)

要定义我想从哪个用户获取数据,我使用:

componentWillMount = () => {
  let {relay} = this.props;
  relay.setVariables({
    studentId: this.props.member.id
  });
}
Run Code Online (Sandbox Code Playgroud)

但是,这里的问题是查询首先null按照中的定义执行initialVariables.我的后端实现有它,如果studentId是NULL,那么它返回所有成员的数据.

结果是上面的查询执行了两次,第一次执行所有成员,第二次执行给定memberId.

这与我内心的其他事物混淆了componentWillUpdate.无论如何我可以传递这个变量,只在第一个查询中获取该成员的数据?

谢谢.

ste*_*her 2

通过将变量通过路径向下传递,为您的应用程序准备好这些初始条件。

class TaskReviewRoute extends Relay.Route {
  static paramDefinitions = {
    studentId: {required: true},
  };
  static queries = {
    task: () => Relay.QL`query { ... }`,
  };
  static routeName = 'TaskReviewRoute';
}

<Relay.RootContainer
  Container={TaskReview}
  route={new TaskReviewRoute({studentId: '123'})}
/>
Run Code Online (Sandbox Code Playgroud)