Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Usage without React? #103

Closed
idkjs opened this issue Mar 10, 2021 · 6 comments
Closed

Usage without React? #103

idkjs opened this issue Mar 10, 2021 · 6 comments

Comments

@idkjs
Copy link
Contributor

idkjs commented Mar 10, 2021

You can use @apollo/client without react with @apollo/client/core.

This lib binds to @apollo/client. Would it be crazy to make this work with @apollo/client/core?

Is that a whole different setup? I tried just changing the binding to @apollo/client/core for the stuff exported from core and it did not work so..

Thanks you, sir.

@jeddeloh
Copy link
Owner

I don't think it would be crazy, no. At some point after I wrote these bindings they changed index.js to be just export * from "./core/index.js"; and export * from "./react/index.js";

What would be your use case? Personally, we use Apollo on our node servers as well. Not because it's the best idea, but it's convenient and consistent. It would be nice to not have to not have the react dependency. However, I already had this need and decided it wasn't personally worth the effort.

I'm certainly open to having two packages, one that is just core and one that includes both, if someone wants to tackle that.

@idkjs
Copy link
Contributor Author

idkjs commented Mar 11, 2021

Greetings, @jeddeloh. I don't 'have a need' specifically. Just ran into it while trying something without React on an elixir server. Was thinking maybe it was an oversight given how thorough you were with this package.

I guess in my head this was a binding for ApolloClient rather than Apollo Client React. Would be cool to have one source of truth for graphql in reasonml/rescript.

As it is, you can use it without react in your code but you have to have react installed which is ok if you arent tripping about extra dependencies.

I tried refactoring the code to not rely on react. Seems to compile but then ppx set up is relying on React and so it breaks.

https://github.com/reasonml-community/rescript-apollo-client/blob/05e3c0db930a5b615a1bb35add6abd95da250a31/src/ReasonMLCommunity__ApolloClient.res#L59-L64

You get stuff like:

Signature mismatch:
  ...
  Values do not match:
    let query: string

  is not included in
    let query: ApolloClient__Core_ApolloClient.Types.Graphql.documentNode

Just thinking out loud here. As i say it, it doesnt sound right. I probably have to figure out how to set up the ppx when not using react. https://github.com/idkjs/rescript-bind-to-core

@idkjs idkjs closed this as completed Mar 11, 2021
@jeddeloh
Copy link
Owner

@idkjs FYI, I think you can just run things without installing react and silence error. That type error you're experiencing it not really related to react. It seems to me maybe you stripped out all of the graphql configuration in bsconfig? You still need everything except for the stuff that starts with extend

@idkjs
Copy link
Contributor Author

idkjs commented Mar 11, 2021

I hear you on the documentNode error. If I understand you, I could leave in the ApolloClient__React_Hooks_ ppx stuff and it should work without having react installed. I will try it. I will try it.

I know that if you dont install react you get a build error if you are not importing from core.

Going between urql and this, its stuck in the back of mind that the graphql stuff could be extracted and be a kind of base library for graphql type bindings. That way, you could use these types with the ppx whether you are using these binding or not. Thats IF the React in the name of the ppx modules actually require react.

I may just be confused about it all.

@kiuKisas
Copy link

Any update about it ? Looking to do the same thing, getting the same errors..

@jfrolich
Copy link
Collaborator

I think it should be pretty trivial if you don't use the react runtime code (and ignore the peer dependency)? Or do I miss something?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants