{"id":13495604,"url":"https://github.com/rescriptbr/react-query","last_synced_at":"2025-06-27T19:32:07.040Z","repository":{"id":54944238,"uuid":"361932397","full_name":"rescriptbr/react-query","owner":"rescriptbr","description":"⚛️   ReScript bindings for React Query","archived":false,"fork":false,"pushed_at":"2024-07-03T11:59:10.000Z","size":59093,"stargazers_count":80,"open_issues_count":6,"forks_count":10,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-13T02:42:29.916Z","etag":null,"topics":["react-query-bindings","rescript","rescript-bindings","rescript-react","rescript-react-bindings","rescript-react-query","rescript-react-query-bindings"],"latest_commit_sha":null,"homepage":"","language":"ReScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rescriptbr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-27T00:31:53.000Z","updated_at":"2024-12-18T15:21:12.000Z","dependencies_parsed_at":"2024-01-16T09:54:05.545Z","dependency_job_id":"948199cf-5963-458c-9b1a-abe3e3f88a19","html_url":"https://github.com/rescriptbr/react-query","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/rescriptbr/react-query","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rescriptbr%2Freact-query","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rescriptbr%2Freact-query/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rescriptbr%2Freact-query/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rescriptbr%2Freact-query/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rescriptbr","download_url":"https://codeload.github.com/rescriptbr/react-query/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rescriptbr%2Freact-query/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262318974,"owners_count":23292986,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["react-query-bindings","rescript","rescript-bindings","rescript-react","rescript-react-bindings","rescript-react-query","rescript-react-query-bindings"],"created_at":"2024-07-31T19:01:36.332Z","updated_at":"2025-06-27T19:32:06.982Z","avatar_url":"https://github.com/rescriptbr.png","language":"ReScript","funding_links":[],"categories":["ReScript"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/logo.svg\" /\u003e \n  \u003cbr /\u003e\n  \u003cbr /\u003e\n  \u003ca target=\"_blank\" href=\"#installation\"\u003e Installation \u003c/a\u003e //\n    \u003ca target=\"_blank\" href=\"#getting-started\"\u003e Getting Started \u003c/a\u003e //\n    \u003ca target=\"_blank\" href=\"#supported-features\"\u003e Supported Features \u003c/a\u003e //\n  \u003ca target=\"_blank\" href=\"https://github.com/rescriptbr\"\u003e ReScript Brazil Community \u003c/a\u003e\n \u003c/p\u003e\n \n\u003e :warning: This repo contains experimental bindings for [@tanstack/query](https://tanstack.com/query/v4) using the new optional fields API.\nIf you're looking for bindings to the React Query v3 click [here](https://github.com/rescriptbr/react-query/tree/v0.0.2).\n\n## Installation\n\nInstall the package using npm/yarn:\n\n```sh\nyarn add @rescriptbr/react-query @tanstack/react-query\n```\n\nAdd the package to `bs-dependencies` in your `bsconfig.json`:\n\n```json\n{\n\"bs-dependencies\": [\n  \"@rescript/react\",\n  \"@rescriptbr/react-query\"\n ]\n}\n\n```\n## Basic usage\n\n```rescript\nmodule Fetch = {\n  type response\n\n  @send external json: response =\u003e Js.Promise.t\u003c'a\u003e = \"json\"\n  @val external fetch: string =\u003e Js.Promise.t\u003cresponse\u003e = \"fetch\"\n}\n\ntype todo = {id: string, title: string}\n\nlet apiUrl = \"https://jsonplaceholder.typicode.com/todos/1\"\n\nlet fetchTodos = (_): Js.Promise.t\u003ctodo\u003e =\u003e {\n  Fetch.fetch(apiUrl)-\u003ePromise.then(Fetch.json)\n}\n\nmodule TodoItem = {\n  @react.component\n  let make = () =\u003e {\n    let queryResult = ReactQuery.useQuery({\n      queryFn: fetchTodos,\n      queryKey: [\"todos\"],\n      /*\n       * Helper functions to convert unsupported TypeScript types in ReScript\n       * Check out the module ReactQuery_Utils.res\n       */\n      refetchOnWindowFocus: ReactQuery.refetchOnWindowFocus(#bool(false)),\n    })\n\n    \u003cdiv\u003e\n      {switch queryResult {\n      | {isLoading: true} =\u003e \"Loading...\"-\u003eReact.string\n      | {data: Some(todo), isLoading: false, isError: false} =\u003e\n        `Todo Title ${todo.title}`-\u003eReact.string\n      | _ =\u003e `Unexpected error...`-\u003eReact.string\n      }}\n    \u003c/div\u003e\n  }\n}\n\n/*\n * Create a new client\n */\nlet client = ReactQuery.Provider.createClient()\n\n@react.component\nlet make = () =\u003e {\n  \u003cReactQuery.Provider client\u003e\n    \u003cdiv\u003e\n      \u003ch1\u003e {React.string(\"ReScript + React Query\")} \u003c/h1\u003e\n      \u003cTodoItem /\u003e\n    \u003c/div\u003e\n  \u003c/ReactQuery.Provider\u003e\n}\n```\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCheckout the compiler output\u003c/strong\u003e\u003c/summary\u003e\nThe JavaScript output is simple, very similar to the original API and *almost* zero-cost.\n\n```javascript\n// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as React from \"react\";\nimport * as ReactQuery from \"@rescriptbr/react-query/src/ReactQuery.bs.js\";\nimport * as ReactQuery$1 from \"react-query\";\n\nvar Fetch = {};\n\nvar apiUrl = \"https://jsonplaceholder.typicode.com/todos/1\";\n\nfunction fetchTodos(param) {\n  return fetch(apiUrl).then(function (prim) {\n    return prim.json();\n  });\n}\n\nfunction App$TodoItem(Props) {\n  var queryResult = ReactQuery$1.useQuery({\n    queryKey: \"todos\",\n    queryFn: fetchTodos,\n    refetchOnWindowFocus: ReactQuery.refetchOnWindowFocus({\n      NAME: \"bool\",\n      VAL: false,\n    }),\n  });\n  var tmp;\n  if (queryResult.isLoading) {\n    tmp = \"Loading...\";\n  } else if (queryResult.isError) {\n    tmp = \"Unexpected error...\";\n  } else {\n    var todo = queryResult.data;\n    tmp =\n      todo !== undefined ? \"Todo Title \" + todo.title : \"Unexpected error...\";\n  }\n  return React.createElement(\"div\", undefined, tmp);\n}\n\nvar TodoItem = {\n  make: App$TodoItem,\n};\n\nvar client = new ReactQuery$1.QueryClient();\n\nfunction App(Props) {\n  return React.createElement(ReactQuery$1.QueryClientProvider, {\n    client: client,\n    children: React.createElement(\n      \"div\",\n      undefined,\n      React.createElement(\"h1\", undefined, \"ReScript + React Query\"),\n      React.createElement(App$TodoItem, {})\n    ),\n  });\n}\n\n```\n\n\u003c/details\u003e\n\n## Supported features\nThese bindings are work in progress, check out the supported features:\n\n- ✅ `=` Fully implemented\n- ⬜ `=` Not implemented yet\n- ⚙️ `=` Work in progress\n- ⚠️ `=` Partially implemented\n\n### Hooks\n\n- ✅ useQuery \n- ✅ useQueries \n- ✅ useMutation \n- ✅ useInfiniteQuery\n- ✅ useQueryClient\n- ✅ useQueryErrorResetBoundary\n- ✅ useIsFetching\n- ✅ useIsMutating\n\n### Providers / Client / Core\n\n- ✅ QueryClientProvider\n- ⚙️ QueryClient \n- ⚙️ QueryCache\n- ⚙️ MutationCache\n- ⚙️ QueryObserver\n- ⚙️ InfiniteQueryObserver\n- ⚙️ QueriesObserver\n- ⚙️ QueryErrorResetBoundary\n\n### Functions / Helpers\n\n- ⬜ focusManager\n- ⬜ onlineManager\n- ⬜ setLogger\n- ⬜ hydration/Hydrate\n- ⬜ hydration/useHydrate\n- ⬜ hydration/hydrate\n- ⬜ hydration/dehydrate\n\n## License\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frescriptbr%2Freact-query","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frescriptbr%2Freact-query","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frescriptbr%2Freact-query/lists"}