Reason React 和 Graphql 处理 ENUM 值

rom*_*man 5 graphql reason reason-react

刚刚开始学习理性反应,并在尝试读取 ENUM 值的 graphql 设置中挣扎。

设置

  • 理性反应
  • 阿波罗graphql
  • graphql_ppx
  • github graphql 端点

我正在通过 github api 获取最新的拉取请求数据,并读取status在 gql 文档中定义为枚举的属性:

  • 打开
  • 关闭
  • 合并

检查网络选项卡,我看到状态是作为字符串接收的。在应用程序中,当我记录该字段时,我会得到一堆反映这些值的整数。smb 可以解释一下,我如何将数据作为字符串“打印”到我的视图中,以及为什么将它们转换为整数?是否有某种生成的类型可以用于变体开关?

let stateEnum = data->map(node => node##state);
Js.log(stateEnum) // possible values: 880069578, 982149804 or -1059826260
// somehow switch these values here?! :)
// current type of `stateEnum` is option('a)
Run Code Online (Sandbox Code Playgroud)

非常感谢,祝你有美好的一天!

Tom*_*ski 4

GraphQL 枚举表示为 Reason 多态变体。在运行时,它们实际上只是整数。如果您想向用户显示它们,您有两个选择:\n1. 使用开关手动将它们映射到字符串

\n\n
let status = \n  switch(node#status) {\n    | `OPEN => \xe2\x80\x9cOpen\xe2\x80\x9d\n    // other cases\n  }\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  1. 您可以使用 BuckleScript 功能生成 jsConverters:
  2. \n
\n\n
[@bs.deriving jsConverter]\ntype status = [ |`OPEN | `CLOSED /* other cases */]\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将为您生成两个函数:statusToJsstatusFromJs。它们可以帮助您在变体与字符串之间进行转换。

\n\n

这是有关它的 BuckleScript 文档:https://bucklescript.github.io/docs/en/generate-converters-accessors#convert- Between-js-string-enum-and-bs-polymorphic-variant

\n