helix

https://github.com/Lokeh/helix
Bryce Tichit 2021-05-31T14:53:29.072300Z

Hey everyone, Nice to meet you! I'm Bryce, I am a Software Engineer taking this year off to bootstrap side-projects. I started to learn web dev this year and had to learn JS and all of its ecosystem, a lot of pain. I just discovered Clojure/ClojureScript and so far look amazing, I'm digging into it right now and trying to understand the best way to build a web app with ClojureScript. Helix so far looks like the best approach to React in ClojureScript for me :) I may ask redundant questions but in the end I was unable to get clear answers to these questions, would be grateful for the help 😄 I'd first like to understand more about the eco-system, as I understand Helix is a wrapper for React, no more. I'd like to understand what tools are necessary in order to build web apps in ClojureScript 1. What is ReFrame? It's not clear what is its full role, it seems like it's used to build SPA in ClojureScript with React and by leveraging re-agent. Does that mean that we should use it with Helix to build web apps? 2. What exactly does shadow-cljs that leiningen does not? So far I understood that shadow-cljs is used to build a ClojureScript application (much like npm start/npm build) and also is the best for npm packages interoperability but in the end leiningen and shadow-cljs features seem to overlap and I don't fully understand how. 3. What other tools would I need to use with Helix in the end to build web apps the most time efficient way possible? 4. What's the best way to kick-start a Helix-powered project eg. best leiningen template, npx, ...? These questions might overlap, I'd be really grateful to have answers. Thanks a lot by advance ! Bryce

wilkerlucio 2021-05-31T15:32:05.072800Z

hello Bryce, welcome to the Clojure/script land 🙂 1. ReFrame is a state management library for working with React in Clojurescript. While Helix just wraps things and try to keep you as close as possible to React, reframe is gonna bring its own constructs, which look like Redux and friends. 2. Leiningen doesn't do anything related to compile CLJS, its a project thing (dependencies, tasks...), like NPM for node. Leiningen is been in the clojure community for a while, an alternative to it is to use clojure.deps to manage dependencies, this is from the Clojure core team and more recent 3. That's a loaded question, depends on your application needs, if you are familiar with React and hooks you could start building with just Helix, and figure state management as you go 4. Not sure if there is any, I usually start from scratch, but maybe https://github.com/seancorfield/clj-new has something

Bryce Tichit 2021-05-31T16:04:45.073100Z

Hey wilerlucio, thanks for your answer ! 1. Ok I see so Re-Frame would be the Redux cousin but in CLJS, make senses ! I built a first web-app this year and in the end I used both hooks and Redux for state management, that would mean that in the same way I could use Re-Frame + Helix then. With Redux I keep the state that is global to the app and I use hooks whenever I need to have local state within a component. Not sure if this is best practice btw I'm just starting out with React. 2. Ok I see but in the end shadow-cljs does some kind of project thing as well nop? You keep your dependencies in a shadow-cljs.edn file for example. 3. Indeed this question was intentionally biased 😛 But I wanted to know if there were some other interesting tools to know about but as you said I will discover them on the fly. 4. Ok thanks will look into that 🙂

wilkerlucio 2021-05-31T16:18:34.073300Z

you'r welcome, about 2, yes, shadow also can do some project management, if you want to reduce the number of pieces you can start with just shadow and it should be fine

wilkerlucio 2021-05-31T16:19:08.073500Z

another tip, if you wanna make a question but not sure what channel to ask, try #beginners

Bryce Tichit 2021-05-31T16:27:11.073700Z

Ok thanks a lot, will remember the #beginners channel !

Bryce Tichit 2021-05-31T16:32:20.075300Z

Follow up questions 😄 I understand that Helix use React hooks as State Management, but do you usually only use this to manage your state? I'd like to understand if just hooks are enough for you to build web apps with Helix