在Relay.setVariables之后,变量未定义

时间:2017-06-23 19:42:44

标签: javascript reactjs fragment relay

我有一个根容器,其中有一些relayVariables

export default Relay.createContainer(UsageView, {
  initialVariables: {
    start: null,
    end: null,
  },
  fragments: {
    viewer: ({ start, end }) => Relay.QL`
      fragment on viewer {
        ${ProductList.getFragment('viewer', { start, end })}
      }
    `,
  },
});

这些变量传递给ProductList组件并在其片段中使用:

export default Relay.createContainer(Component, {
  initialVariables: {
    start: null,
    end: null,
  },
  fragments: {
    viewer: ({ start, end }) => Relay.QL`
      fragment on viewer {
        id
        organization {
          createdAt
          products (start: $start, end: $end) {
            name
            usageTotal
            ${ProductListItem.getFragment('data', { start, end })}
          }
        }
      }
    `,
  },
});

如您所见,然后将这些传递给另一个组件ProductListItem

首次加载页面时,所有数据都会被提取,加载和渲染。我有一个下拉列表,允许用户更改开始结束值,然后在父容器中调用relay.setVariables

setDateRange = ({ start, end }) => {
  this.props.relay.setVariables({
    start,
    end,
  }, (state) => {
    console.log('READYSTATE CHANGE', state);
  });
}

调用此函数时,onReadyStateChange被调用4次,并显示以下消息序列:

  1. " NETWORK_QUERY_START"
  2. " CACHE_RESTORE_START"
  3. " CACHE_RESTORE_FAILED"
  4. " NETWORK_QUERY_RECEIVED_ALL"
  5. 完成此操作后,开始结束的值为undefined,导致所有内容中断。

    我似乎无法弄清楚为什么会发生这种情况,因为setVariables中设置为开始结束的值有效。

1 个答案:

答案 0 :(得分:0)

我意识到我没有正确使用setDateRange函数的输入 - 它被传递了一个JSON字符串,需要进行解析。不幸的是,从转发请求中无法判断这是问题......