[HN Gopher] How to start a React Project in 2023 ___________________________________________________________________ How to start a React Project in 2023 Author : antidnan Score : 92 points Date : 2023-03-23 19:57 UTC (3 hours ago) (HTM) web link (www.robinwieruch.de) (TXT) w3m dump (www.robinwieruch.de) | wouldbecouldbe wrote: | If you enjoy productivity on all levels (also performance) just | go with Next. If you are a purist go vanilla js. | bmikaili wrote: | If you genuinely care about productivity go with Svelte. React | is unproductive and unintutive. | bottlepalm wrote: | Tried it, went well for awhile, but when you get stuck it's | tough to find support. Very small community. Probably 1000x | less content/resources/references out there for it. | | On the other hand NextJS/React have been both productive and | intuitive. There are so many examples out there and people | are constantly talking about the nuances of both here and on | other sites. | | It'd be great to see Next integrate something like | TRPC/OpenAPI into it so calls to the backend could be | statically typed. That would really polish up the end to end | experience. | jrsj wrote: | You might be interested in this if you weren't already | aware of it https://blitzjs.com/ | | I've been using their superjson library with Remix & its | pretty much solved all of my client/server type issues. | jrsj wrote: | Remix is worth checking out as well. I've had a great | experience with it so far. | stickfigure wrote: | Create-react-app is deprecated? And the recommended replacement | for SPAs is from the guy that makes Vue? What on earth? | ppseafield wrote: | It started out as one of his projects - an experiment to see if | esbuild and native JS modules support in browsers could be used | for development instead of webpack. It's become it's own | project and has a large plugin ecosystem. The project doesn't | involve vue, although it's the currently prescribed way to | build vue projects now. | pcthrowaway wrote: | Yep, see | https://github.com/reactjs/react.dev/pull/5487#issuecomment-... | aobdev wrote: | It seems crazy, but it's true. Also consider that Vite is a | wrapper around 2 tools that are impressive in their own right: | esbuild and rollup (and the latter was created by the guy who | made svelte!) | hoofhearted wrote: | I'm currently working on a free open source framework for React | developers and I'd love some feedback! | | It's a batteries included React framework for scaffolding out a | Stripe level frontend, complete with a blog and documentation. | | It's built on top of Next.js, and is essentially free to host. :) | | Please check out my minimum viable prototype and tell me what you | think: https://elegantframework.com | ggregoire wrote: | I'd add to the article that Vite allows to make React components | libraries too. Same tool to build your apps and your libraries. | blowski wrote: | > However, since SSR is becoming a more important topic these | days | | Is it? This is the first I've heard of this fantastic news. | What's changed to have caused the increased importance? | chrisfosterelli wrote: | IMO the community shifted from SSR to SPA initially very | rapidly due to the huge benefits over entirely SSR apps, but it | came with some notable pain points and some new frameworks that | incorporate parts of SSR have been attracting a lot of | attention for solving those pain points. | | A lot of leading maintainers now feel that the best solution is | more of a middle ground where frameworks support both server | side and client side rendering with the developers given the | flexibility to choose what renders where (or on both) depending | on the app's needs. React is driving a lot of this now with | server side components, but there's a lot of frameworks that | were doing it beforehand which has inspired much of what | they're doing now. | jcoletti wrote: | npx create-next-app@latest myapp | joemi wrote: | As someone who just decided to learn React (and modern | javascript, after 1.5 decades or so of not programming in | javascript at all) in the past month or two, I've been extremely | frustrated by the documentation (in particular) and the whole | state of flux that it's in (in general). When I started with | React, all the tutorials/guides on the site said "this is the old | documentation, it's about to be replaced" on every single page. | Still I worked through it and learned a bit. But by the end of | working through it I figured "well, I might as well click the | link that's on every page and see what modern React is like". So | I tried to follow one of their guides and had issues with the | very beginning. But I knew enough React to know what to do to fix | the issue, so I did, and proceeded with the new guide, only to | hit more problems immediately after that. So I gave up, and just | stuck with the "old" way to do React. But then just 1 week after | all those issues, the new docs were switched over to be the main | docs. I'm honestly kind of afraid to try to work through them | again and see if they fixed them already. | | And now I just read this article, and, well, I'm even less | motivated to get into this stuff. Is this just a really bad time | for React? Or is it always such a chaotic changing climate around | it? | ldoughty wrote: | I completely agree with this.. | | I have been trying to get into front end JS development and it | feels like every guide is broken within 6 months... When I | actually succeed at one part, I then realize that to add | testing, or bundling, I need to follow this other guide, which | isn't stable anymore, and then breaks the whole project. I have | tried 4 or 5 times now trying different frameworks and "quick | start" features or following recent YouTube videos, giving it | 3-5 hours each time, and I can't get a working typescript based | UI + test + bundler to work. | | Edit: I should say, I'm open to any _working_ guides that go | from start to bundle that you all know about... | pcthrowaway wrote: | > As someone who just decided to learn React (and modern | javascript, after 1.5 decades or so of not programming in | javascript at all | | Sorry you're experiencing this. It's not "just React" though, | it's pretty much all Javascript (or Typescript) now. Especially | front-end, but I swear, JS/TS on the front or back is like | trying to learn to drive a car in heavy traffic while also | repairing the brake lines which are malfunctioning | keyle wrote: | Saying it's not "just React" is normalising the problem, | which I think really doesn't benefit React trying to set | itself as the de-facto standard for front-end code. | robear wrote: | I write React but don't look at the docs much so I am not | familiar with all the changes there. The basic concepts of | React haven't changed much over its history. Hooks are newer | than class components, etc but class components still work. | Hooks have been out since 2019 so they aren't exactly new (and | they were in the old documentation). React itself has been | quite backwards compatible. | | The Javascript ecosystem tends to have lots of flux with new | libraries and ways of doing things coming out all the time. I | have found React to be one of the most stable libraries around. | I can update versions of React and my code continues to work as | before. Libraries that I depend on tend to have more issues | with this and version updates can mean changes in the API for | the library or a newer version of React not being supported. | | My suggestion for someone learning React would be to start with | the simplest way of getting started and learn React before | learning concepts brought in with frameworks, etc. If I were to | start learning React today, I would start with Vite. | _hao wrote: | For context I'm a specialized back-end (but with a lot of | experience in desktop GUI/game engine stuff) dev and I also | wanted to learn React recently to round off my skills and be | more marketable in the job market. | | Like yourself I also prefer written docs, but trying to find | such structured info was an exercise in futility. At the end I | used my existing Pluralsight subscription and went through the | React 18 path they have which is around 18 hours or so in | total. The courses covered different topics around React like | components, hooks, testing etc. Good thing is the courses also | have full transcripts! I followed them along and created some | small apps myself in the process. Now I'm pretty much sure I | can handle working with React in a normal job setting. You | might want to consider that option. To be honest FE seems like | programming on easy mode compared to some of the things I'm | used to working on in my day to day. If you are an experienced | programmer you should have no problem getting caught up to | speed on that relatively quickly. | firecall wrote: | I've had a similar time reading the Firebase docs for Swift and | SwiftUI! | ggregoire wrote: | > is it always such a chaotic changing climate around it? | | The old doc was like 10 years old, they just officialized the | new one this week. | | Create React App was the recommended way to build a React app | for like forever but Facebook stopped maintaining it 2 or 3 | years ago. The drop-in replacement is Vite. | danlugo92 wrote: | Start with The Tao of Redux | schwartzworld wrote: | It might seem chaotic to you, but the docs change has been a | long time coming, and isn't a surprise to anybody. | | > Is this just a really bad time for React | | There are some concepts you may struggle with. That's to be | expected. | | But the new docs don't represent negative change. The old docs | were not representative of how most react is written today. | That was really confusing for newcomers. There's nothing | "wrong" with doing it the old way, but most jobs that use React | are going to require you to work with hooks in some capacity. | rzzzt wrote: | An incomplete sampling of the projects/frameworks/libraries | mentioned in the article: - create-react-app | - React - Vite - Webpack - esbuild - | TypeScript - ESLint - Vue - Remix - | Next.js - OpenNext - Astro - Gatsby - | Parcel - Turborepo - React Native - Expo | - Tauri - Electron - SvelteKit | nextaccountic wrote: | It comes close, but it isn't mentioning Turbopack [0], the | thing I'm using right now to replace webpack. Really happy with | it so far. (Turborepo is a sister project, but I'm not sure how | the two are related - if Turborepo depends on Turbopack or | vice-versa - and in any case I don't need it) | | [0] https://turbo.build/pack | nicoburns wrote: | The article does a pretty good job of telling you which ones | you need to care about and which ones you don't need to care | about. And it's only 4-5 of these for a given project, which | would look something like: | | - TypeScript (langauge) - React (framework) - Vite (build | tooling) - ESLint (linter) | | That's not really any different to any other language. Maybe | you have one extra tool in there for the build step. | aaronrobinson wrote: | What's your point? | rzzzt wrote: | It's ridiculous. | [deleted] | nwienert wrote: | Can you name another industry in tech that doesn't have a | lot of options? Lets try backend, database, infra, ML, data | science. | rzzzt wrote: | I feel there is a difference between all the domains you | mention and frontend in that once you have made your | choice regarding a single vendor or technology, very few | vastly different avenues are left for _starting_ a | project. One example: | | 1) "How to start a Java project" - very vague, the | article will arrive at your doorstep in book form as | there are tons of possible ways depending on the use case | | 2) "How to start a REST API backend in Java" - a handful | of bigger contenders are left on the table; some feature | and performance comparisons could be handy | | 3) "How to start a REST API backend using Spring Boot" - | a focused set of steps that leaves you with a controller | class that will happily greet the user when a GET request | is sent towards its general direction. I don't really | want to explore the possibility of creating an | application using NetBeans Platform or whatever at this | point. | | Here the casual reader might think that we are at level | 3, but it seems that it's closer to level 1. | keyle wrote: | I've stopped chasing front-end and fullstack roles and I know | happily bang out PHP, because of this mess. PHP, think of the | irony. | 8note wrote: | I think this would be more useful as a tree structure than as a | list. | | Eg. Why would I need to care about electron and react native | for a web app? | rzzzt wrote: | I dove into the article expecting some advice on "How to | start a React Project in 2023", got a compendium of the JS/TS | framework landscape instead. | digdugdirk wrote: | I'm a non-programmer, and recently I've been trying to turn a | bunch of various time-saving scripts I've created over the | years into a vaguely cohesive GUI. I figured aiming for a | modern web gui framework (run locally) would be the way to go. | | This comment encapsulates the experience so, so well. I have no | idea what is going on, everyone tends to have a _very_ strong | opinion on which way to go, but no one can provide an | explanation of the baby steps in how to get started. Or even | why to get started. It 's maddening. | headphoneswater wrote: | [dead] | agrippanux wrote: | I just built a ChatGPT-powered Spanish tutor for my son using | Fresh from Deno and it was overall an enjoyable experience. Once | I grok'd how islands worked it was pretty smooth sailing. | | I do love NextJS but I will try a few more Fresh projects soon. | yieldcrv wrote: | I love Next.js and don't find Vercel vendor lock-in from it. I've | deployed a next app on github pages and it understood my folder | based API structure fine | aerzen wrote: | A bit unrelated, but what happened to Angular? | blowski wrote: | I learned Angular with v1. When v2 came out, it was so | different I had to learn a new framework either way. I went | with React because it was the one gaining the most traction. I | think that's what happened writ large. | wetpaws wrote: | Same thing that happens to every JS framework after a few | years. | candiddevmike wrote: | Not sure what your definition of few is, but there are plenty | of old, boring, stable frameworks out there that run | perfectly fine, like Mithril. You don't have to constantly | rewrite your frontend if you stick as close to raw JS/TS as | possible. | swsieber wrote: | Angular doesn't play well with newer build tools - esbuild, | vite, etc., making Angular quite isolated from the other | frameworks. So a plug for vite is a plug for most frameworks | except Angular (and others not on the radar). | | But also Angular has egregiously big build times as your | project scales up, and that sucks. | Bellend wrote: | What about your developers though? Our company pays for 5 | days a week 8 hours a day of talented humans in a medium | team. I can throw compute for 1/10000th that. | | A 56 module Angular 15 codebase `npm start` takes 10 seconds, | and compiles after change faster than a browser refresh. The | build takes 67 seconds. | | What scale up are you talking about so that I know in the | future what to look out for? | pictur wrote: | Probably few people use it, but it is probably very useful for | those who use it. I like angular's philosophy of trying to | solve every issue in itself. | robopsychology wrote: | Angular 14 is the latest version, last I looked it was 5. | Things move so fast in FE world! | iamsanteri wrote: | And soon quite a bit of us FE devs or any devs for that | matter are nailed out anyhow, just look at the LLMs | developing. Give it some time, haha. | Bellend wrote: | I still love it, after 6 years I don't really know what problem | it isn't solving and I mean 10 versions later! Also keep it to | yourself but RXJS, my old hatred is now responsible for some of | the best code I have ever written as far as being proud is | concerned. | jrsj wrote: | Angular is basically headed down the same path that Ember went | down IMO. A stable & mature but declining framework. | | The same could ultimately happen to React as well. I'm working | on a new project right now using Remix, which is great, but | I've also realized that really nothing I've done wouldn't have | worked just as well without React. Fortunately I really enjoy | Remix, but if SvelteKit or SolidStart provide a similar | experience I don't really see why I would stick with React. | pictur wrote: | Although I don't like some features of nextjs, it works for me. | (things like server side prop management) | leerob wrote: | (I'm on the Next.js team) | | Something we haven't done a great job of, so far, is talking | about how you can use Next.js for SPAs or client-only React | sites. You can start with basic HTML/CSS/JS, deploy and host | anywhere, and then optionally opt-into features that require | using a server (and host somewhere like a Node.js server or | through a Docker container). Next.js can generate an HTML file | per route, rather than having one large SPA bundle. | | There's been a lot of feedback around CRA no longer being | recommended and folks looking for a replacement[1]--and | uncertainty if Next.js is the correct solution. We've been | working on some better docs[2] that help explain how to use | Next.js without a server. | | [1]: https://twitter.com/dan_abramov/status/1636886736784457734 | | [2]: https://beta.nextjs.org/docs/configuring/static-export | earthnail wrote: | So we're back to the old pre SPA web and even have a term for it: | MPA | | If I build an MPA, why should I choose Astro if I can choose | Rails? That's a serious question to the HN community, not a | rhetorical one - would very much love to learn if there's | something new here. | gregors wrote: | I'd definitely choose Rails or Phoenix over Astro. | j-krieger wrote: | Because Rails is awful. You do not need to choose JavaScript. | Just don't go with Rails. | WJW wrote: | Which parts of Rails do you dislike? It can be terrible if | done poorly but overall Rails is pretty good for fast | iteration. | hoofhearted wrote: | We're using typescript to create static html like it's 1996 | again! Complete with inline styles and everything. | | In the web browsers eyes, a Next.js app is just a plain old | html page load when you navigate within the app. I believe the | days of SPA's and mounting on the bang# sign are dead. Some | smart folks realized that it was more computational efficient | to output plain old html like back in the days. | deepsun wrote: | As I see it, basically the inertia that JS devs don't want to | switch from their beloved horrors of NPM. | | Rails, Django/Flask or even Apache Struts or Java Spring would | do good in this use case. | iamsanteri wrote: | After watching all this for a while, in order to get MVPs up | and running while holding the IP and other things under control | I've worked through RoR docs and did some projects in Django | and I'd like to know more too. I'd bet on a re-emergence of | traditional monoliths quite soon. That is if pocketbases and | supabases aren't going to be the new default which I'm not sure | about right now. Recently built a site in NextJS and Nuxt | though and I got to say it wasn't that bad at all. But there's | something people are not considering enough and that is | bringing value fast. That's why I'm going deeper into Django | (stability, reliability, value). | SCUSKU wrote: | The other thing that keeps me in the Django ecosystem is | frankly Django Admin. If any of the JS backend frameworks | would provide these out of the box things that basically | everyone needs, I would be much more open to using them. | | For example, an admin panel for changing your models (like | Django Admin), performance monitoring like Phoenix's | LiveDashboard. | withinboredom wrote: | And you can use something like htmx to do everything on the | server and use jquery to do fancy things. It's a thing, | especially for small one-off projects. | EduardoBautista wrote: | TypeScript. | | Rails is faster for building an MVP. But it's significantly | worse than a project built with a typed language when it comes | to extending and maintaining. | | I thought I had misconfigured Sentry (for error logging) | because the type of errors that plague Rails, or any language | that is not typed, just don't happen with a typed language | (unknown method called on NilClass). | | We can decide to make a column in the DB to no longer allow | NULL values, and we are immediately notified by the TypeScript | compiler about every line that needs to be updated. | ch4s3 wrote: | > Rails is faster for building an MVP. But it's significantly | worse than a project built with a typed language when it | comes to extending and maintaining. | | I'm not sure that the academic work on software engineering | really bares this out. Th Static vs. Dynamic debate is far | from settled and increasingly looks to me like a matter of | preference. | chatmasta wrote: | If you're interested, this is the "absolute minimum" React | project I was able to create, using esbuild (see `dev.mjs`) and | some .html files. [0] It's a sub-package in a larger workspace, | so there is some complexity inherited from the monorepo in terms | of `tsconfig.json` and dependency management, but you can ignore | that; the esbuild part was pleasantly simple to implement, and it | pretty much "just works," such that each file in `www` is an | entrypoint with one corresponding script from `pages/` that calls | `createRoot(container).render(<App />)`. | | Note that's also a "sandbox" for development purposes. If I were | creating a new production app today, I would probably use Vite, | which uses esbuild under the hood anyway. It's super easy to get | started [1] with not only React, but also Lit or Vue or any other | number of pre-configured templates, and it takes care of all the | drudgery of bundling and tests for you so that you can get | straight to work. | | [0] | https://github.com/splitgraph/madatdata/tree/main/packages/t... | | [1] https://vitejs.dev/guide/#trying-vite-online | twodave wrote: | I was fully expecting to see a one-liner for this article: npx | create next app. I think this article overstates the | disadvantages of using a framework like NextJS. | | If you don't want to work on the bleeding edge, then don't | upgrade right away. That's true of literally every library out | there. | | And IMO it's trivial to host a next app just about anywhere. | Vercel has done a much better job with portability than you would | typically expect from similar companies. | | The docs for NextJS are also just... rock solid. It really feels | like they cover everything. | | I'm not affiliated, just a happy developer using their framework. | nwienert wrote: | If you are targeting native and web, I think the Tamagui + Solito | starter that lets you share code between Expo/Nextjs is unbeat | (disclaimer, I made Tamagui): | | Just `npm create tamagui@latest` | | See: https://tamagui.dev | | Happy hacking! | drinchev wrote: | > bleeding edge tech solves many problems ... | | > which day to day tech workers working on internal B2B do not | face | | That's so true. Good luck explaining to management that the | front-end app needs additional cloud resources, such as a server, | so we are on the edge of the trend with SSR. | | Most apps behind a login face tough architectural / security | meetings, defending SSR for their use-case. ___________________________________________________________________ (page generated 2023-03-23 23:00 UTC)