获取列表查询中单个项目的附加数据

2023-12-24

我正在尝试做类似的事情this https://dribbble.com/shots/2545580-Simple-Profile-Page使用 React 和 Relay - 从列表到单个项目的平滑动画。

我目前有列表组件(列表查询)和单项组件(节点查询),但有一个问题:这是两个不同的、独立的视图和查询,我想不出一种简单的方法可以在这两个视图之间平滑地设置动画。


最简单的方法可能是转换/缩放相同的列表项:

React 部分很简单,我将计算单击时的屏幕尺寸并将列表项转换为全屏尺寸。


数据怎么样? Relay 可以实现这样的功能吗?我可以为列表查询中的单个项目获取更多数据,或者可以在同一组件中使用节点查询吗?a'la每个组件使用两个查询?


// Simple list query example

export default Relay.createContainer(PostList, {
    initialVariables: {
        count: 10
    },
    fragments: {
        viewer: () => Relay.QL`
            fragment on Viewer {
                posts(first: $count) {
                    edges {
                        node {
                            id
                            title
                        }
                    }
                }
            }`
    }
})

// What if I needed to fetch "content" for a single item as well?

是的,您可以为每个组件获取多个片段。我的建议是为所选帖子提供一个单独的片段,并在专门用于帖子详细信息(永久链接)视图的路线中使用它。

首先,添加一个片段来表示所选帖子。

export default Relay.createContainer(PostList, {
  initialVariables: {
    count: 10,
  },
  fragments: {
    selectedPost: () => Relay.QL`
      fragment on Post {
        id
        title
        description
      }
    `,
    viewer: () => Relay.QL`
      fragment on Viewer {
        posts(first: $count) {
          edges {
            node {
              id
              title
            }
          }
        }
      }
    `,
  },
});

然后创建两条路由。一个仅代表索引视图的查询,另一个代表永久链接视图的查询。

class IndexRoute extends Relay.Route {
  static queries = {
    viewer: () => Relay.QL`query { viewer }`,
  };
  static routeName = 'IndexRoute';
}

class PostPermalinkRoute extends Relay.Route {
  static queries = {
    selectedPost: () => Relay.QL`query { node(id: $postID) }`,
    viewer: () => Relay.QL`query { viewer }`,
  };
  static paramDefinitions = {
    // By setting `required` to true, `PostPermalinkRoute` 
    // will throw if a `postID` is not supplied when instantiated.
    postID: {required: true},
  };
  static routeName = 'PostPermalinkRoute';
}

现在,您需要编写一些代码,当您想要在索引视图和永久链接视图之间切换时,使用新路由重新呈现应用程序。默认情况下,Relay 将在加载下一个路由的数据时继续渲染旧路由,因此您应该能够在等待数据时执行转换。

function render(route) {
  ReactDOM.render(
    <Relay.RootContainer
      Component={PostList}
      route={route}
    />,
    container,
  );
}

// When it's time to render the index...
render(new IndexRoute());

// Upon selecting a post...
render(new PostPermalinkRoute({postID: 123}));

当前路线可供您使用this.props.relay.route,所以你应该能够对你应该使用的状态做出一些推断this.props.relay.route.name and this.props.relay.route.params.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取列表查询中单个项目的附加数据 的相关文章

随机推荐

  • 将 iOS 崩溃转储中的偏移量与反汇编的二进制文件相匹配

    我无法将 iOS 崩溃转储的堆栈跟踪中的偏移量与 otool 输出的二进制文件反汇编中的偏移量进行匹配 任何人都可以确认我原则上如何匹配这些 例如 如果我在故障转储中得到一行 0 myapp 0x00005b0a 0x1000 19210
  • fcntl(), F_GETFD 在 UNIX 中的含义

    unix 中 fcntl 函数中 F GETFD 的含义是什么 据我了解 如果指定位置没有文件描述符 它应该返回 1 如果这是真的 那么什么时候会发生 当接近该位置的文件描述符时 F GETFD 也不返回 1 这是使用 F GETFD 的程
  • window.onload 中调用的函数无法识别元素

    我在这里有点困惑 我认为指定的函数window onload在页面加载之前没有执行 尽管如此 我在下面的代码中遇到了错误 这是jsfiddle版本 http jsfiddle net Claudius raktx img alt src h
  • 在c++中获取动态库目录(linux)

    是否有任何编程方式来获取程序加载的动态库的位置 我知道可以获得 可执行 运行路径 但这对我来说还不够 我正在开发一个具有一些依赖项的外部库 我需要相应地指向它的位置 例如 程序运行在 local deepLearning bin 该程序使用
  • 同步计时器以防止重叠

    我正在编写一个 Windows 服务 它定期运行可变长度的活动 数据库扫描和更新 我需要经常运行此任务 但要处理的代码不能安全地同时运行多次 如何最简单地设置一个计时器 每 30 秒运行一次任务 同时不重叠执行 我假设System Thre
  • 带有自定义视图控制器的 iOS 共享扩展

    我正在创建一个共享扩展 以允许将 Youtube 视频共享到我的应用程序中 但很难顺利地呈现我的自定义 UI 我不想使用仅包含原始 Youtube URL 的默认视图控制器 而是想做一些视觉上类似于 Facebook 扩展的操作 显示缩略图
  • 实体框架 - 在多对多关系中两次添加相同的实体

    好的 所以这里是交易 我有两个实体 产品 和 零件 产品由零件组成 而且零件可以在其他产品中重复使用 这些实体之间的关系是多对多的 这一切都很好 问题是我不能将同一部件两次添加到同一产品中 EF 似乎强制所有相关实体都是唯一的 考虑以下代码
  • 当滚动样式设置为日期时,log4net 有时不会滚动日志文件

    我有一个 Windows C 应用程序 它使用 log4net 进行日志记录 这是记录器的配置方式
  • Java Struts 1:从一个动作前进到另一个动作。通过 ActionForm 传递数据

    我们一直在尝试从一个操作重定向到另一个操作 希望数据能够在相应的操作之间传递ActionForm豆子 第一个操作接收来自浏览器的请求 打印数据字段 并将其转发到另一个操作 该操作打印相同的字段并重定向到 JSP 问题是ActionTo正在打
  • 调用 initWithNibName 不会初始化笔尖中的项目,它有 0x0

    当我打电话时 self viewController DidItViewController alloc initWithNibName DidItViewController bundle nil 然后我在调试器中执行此行后立即检查 se
  • 动态规划 - 斐波那契

    基本上 我是一名学习程序员 这周向我介绍了动态编程 我们的任务是使用动态规划找到斐波那契数列 提供的伪代码显然位于函数中 init table to 0s if n 1 return n else if table n 1 0 table
  • 将值添加到闪亮的反应表中

    我希望我的闪亮应用程序的用户能够迭代地将元素添加到表中 但我无法弄清楚如何保存这些值 在此示例中 我希望用户能够在文本框中添加值 这些值应添加到主面板中表格的底部 此时先前添加的值将丢失 library shiny runApp list
  • 从 GCloud 激活服务帐户

    我正在尝试配置一个Google Cloud Storage 存储桶对象更改的通知 https developers google com storage docs object change notification Authorizati
  • 在phonegap上播放youtube视频

    我正在使用phonegap开发一个应用程序 其中视频部分显示使用youtube jsonc api检索的youtube视频列表 我希望单击链接时在应用程序内播放视频 以便在关闭视频时再次显示我的应用程序界面 YouTube api 提供了视
  • Scala 中的函数式编程练习 6.11。这个 for-comparion 是如何工作的?

    代码在这里 https github com fpinscala fpinscala blob master answers src main scala fpinscala state State scala https github c
  • 使用 Autofac 进行运行时注册

    在与同事讨论 Autofac 时 出现了依赖项的运行时注册问题 例如 在 Prism 中 程序集经常在运行时加载 并且它们的依赖项在 IoC 容器 通常是 Unity 中注册 Autofac 如何实现这一点 从 Autofac 的文档和我在
  • javax.net.ssl.SSLHandshakeException:禁用 SSLv2 和 SSlv3(仅限 TLS)(及更高版本)时,Android 5.0.0 上握手失败

    这是我的第一篇文章 我将尽力尽可能清晰 抱歉我的英语 这是我的麻烦 我使用 Retrofit 1 9 0 和 okhttp 2 7 5 来执行 API 调用 一切都很好 直到我的服务器提供商禁用了 SLLv2 和 SSLv3 导致安全问题
  • 在 Linux 上,access() 比 stat() 更快吗?

    我本以为 access 只是 stat 的包装 但我一直在谷歌搜索并得到发现了一些轶事 https www redhat com archives libvir list 2009 November msg00403 html关于用 更便宜
  • 我可以同时使用 JavaScript 和 TypeScript 开发 Node.js (Express) 应用程序吗?

    我有用 JavaScript 编写的 Node js 项目 Express REST API 我们决定将整个项目重写为 TypeScript 是否可以慢慢地 部分地进行 但仍然能够启动服务器 我想重写一些部分 所以项目将部分 JS 部分 T
  • 获取列表查询中单个项目的附加数据

    我正在尝试做类似的事情this https dribbble com shots 2545580 Simple Profile Page使用 React 和 Relay 从列表到单个项目的平滑动画 我目前有列表组件 列表查询 和单项组件 节