首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特定深度的递归查询

特定深度的递归查询
EN

Stack Overflow用户
提问于 2017-02-15 04:17:32
回答 1查看 176关注 0票数 0

我有一个树形结构,我试图查询一个特定的深度。我是一个新的接力者,所以我不确定我是不是在用正确的方式或者甚至是不是可能的。

我的代码目前是这样的:

代码语言:javascript
复制
class TreeRoot extends React.Component {
  render() {
    var container = this.props.treeRoot;
    return (
      <div>
        <ViewNode viewNode={container.root} maxDepth={10} expand={true}/>
      </div>
    );
  }
} 

class ViewNode extends React.Component {

   render() {
      var vn = this.props.viewNode;
      return (
       <div>
        <div>{vn.type} {vn.widget} {vn.mode}</div>
         <ViewNodeList viewNode={vn} maxDepth={this.props.maxDepth-1}/>
       </div>
      );
  }
}

ViewNode = Relay.createContainer(ViewNode, {
    initialVariables:{
        maxDepth:1,
        expand:false
    },
    fragments: {
      viewNode: (variables) => Relay.QL`
        fragment on ViewNode{
          id
          type
          widget
          mode
          viewNodes @include(if: $expand){
            ${ViewNode.getFragment("viewNode", {maxDepth:(variables.maxDepth -1),expand:(variables.maxDepth > 0)}).if(variables.expand)}
        }
    }`,
  }
});

class ViewNodeList extends React.Component {
  render() {
    const vn = this.props.viewNode;
    if (!vn.viewNodes){
      return (<div></div>);
    }
    return (
      <div>
        {vn.viewNodes.map((el, i)=> {
          return <ViewNode key={i} viewNode={el} maxDepth={this.props.maxDepth} expand={this.props.maxDepth > 0}></ViewNode>
        })
        }
      </div>
    );
  };
}

TreeRoot = Relay.createContainer(TreeRoot, {
    fragments: {
      root: () => Relay.QL`
          fragment on TreeRoot{
              id
              name
              root{
                  ${ViewNode.getFragment('viewNode',{maxDepth:10,expand:true})}
              }
           }
       `,
    }
  }
);

重要的一点是我试图控制ViewNode组件的viewNode片段中的递归。它试图在递减'maxDepth‘变量并使用'maxDepth’计算'expand‘变量的值时向下递归。是否继续递归取决于“扩展”变量。

目前,这将检索根和第一级子对象,但不会按预期递归。我想要做的事情是可能的吗?如果是这样,我是在正确的轨道上还是以完全错误的方式进行呢?

EN

回答 1

Stack Overflow用户

发布于 2017-06-21 09:30:24

典型的模式是为内容创建一个片段,然后在查询中嵌套元素。例如。

代码语言:javascript
复制
fragment ViewContent on ViewNode {
  name
}

query ViewQuery {
  root {
    viewNode {
      ...ViewContent
      viewNode {
        ...ViewContent
        viewNode {
           ...ViewContent
        }
      }
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42235417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档