Live data from Hacker News

My struggle to learn React

bradfrost.com

71–80 of 218 posts

Re: My struggle to learn React

#71
I feel React's best use case is as a view backend in micro-frameworks like re-frame in ClojureScript.

React only gets complicated when you use states and mutable props, or when logic is put inside components.

As a view backend it just becomes a FSM translating app state into pure views and nothing more.

Re: My struggle to learn React

#72

The takeaway I got is that it seems like the React stack has worse or non-existent separation of concerns and thus it'll affect how your frontend engineers work, possibly to their detriment if they're not proficient in javascript.

As a proficient developer I find react to be one of the first languages where I can group concerns correctly.

HTML, js and CSS aren't separate concerns. Each component is a separate concern.

Re: My struggle to learn React

#73

Earlier quoted context omitted.

I mean this in a nice way, I'd really appreciate a gist showing how you get the core concept of react-router in 50 lines. It's in a project of mine now and maybe it shouldn't be.

Well, it really boils down to const path = findThePath(); class Router extends Component { render() { if (path === "/about") return else if (path.match(someRegex)) { const data = parseSomePath(path); return } else { return } } } Seems as though React Router has gotten a bit complex because it's abstracted away from the concept of a webpage, such that one can use it in the browser, or React Native (which can be a numb…

React Router v4 is particularly difficult to get used to when compared to earlier versions. While I don't much mind it (I get it working, then I don't need to touch it anymore), it definitely took me some time to wrap my head around it.

So yeah, it works good when you get it working, so yeah, the best thing to do is to just buck up and learn if it you need it. But boy does it suck getting there.

All of that said, I don't understand where this view comes from that Redux is extremely confusing. It can indeed sprawl a little. Say, if you keep you containers, reducers, and actions in their own directory trees. The overall architecture didn't take me very long to grasp and start to leverage.

Plenty of folks find their home in Flux or MobX instead, but I'd have to guess that a lot of the confusion is actually confusion about state containers and their uses.

Re: My struggle to learn React

#74
I originally started with AngularJS and hated it, I was learning javascript alongside it and I couldn't stand the abstraction layer, I felt I wasn't learning anything except how to make things 'work' in angular. Then comes react, I get to see all my logic right along with my html/css! It was great, I learned how to debug, where things were going wrong or right and then began to work on the better practices and work flow. They take time and deliberate practice to really understand 'why'. THEN add redux and see how you can use it to help your app communicate. Multiple component-prop passings/pervasive callback chains all start to disappear and that's great. I can't stress enough how sexy and clean a productive vanilla react app looks to me now. I also just started a new job 2 months ago where we use modern angular(i actually really like it now). So it goes...

Re: My struggle to learn React

#75
the fact that the author spent so much time/money/effort to learn react, and it still isn't clicking... I don't think that's a good sign. I think react has an approachability problem - maybe it's a design feature, or an issue of speed and documentation.

Obviously, react works for some people. It clicks with them. But I think a lot of folks prefer something with more clarity. Things change so fast that guides go out of date and devs/codebases fall behind on whats best practice. and this isn't without significant costs on the people who are trying to learn or maintain.

Conversely, Frameworks like Rails (My point is: It doesn't have to be this way. This mess is man-made and not beyond clean-up, but doing so may require some changes.

Re: My struggle to learn React

#76
At the risk of looking like a shill for my own stuff, I'd suggest an alternative way to learn React.

Part of the difficulty is trying to understand it all "from the bottom up", where you can't see the big picture because you're getting constantly tripped by ES6 vs. JSX features and trivial differences in component declaration syntax and whatnot. Instead you can learn it "from the top down" using React Studio:

https://reactstudio.com

It's an application modeling environment that lets you experiment visually with concepts like data binding and immediately see how it affects the resulting JSX code.

Because you're always working on a complete web app (rather than e.g. isolated components), it can be easier to understand the full picture of how things fit together. For example, you can start by simply placing some elements in a screen, then move them into a component of their own, then bind the contents of those elements to some props that come through the component, and finally use that component within a list that gets populated from a real data source. (Speaking of working with real data, there's a great plugin for Firebase Cloud Firestore [1] that lets you do realtime database reads and updates.)

Under the hood, the exported projects are using Facebook's create-react-app. There's no proprietary framework layered on top, it's just plain React with minimal dependencies (no Redux, etc.) There's also git integration and a rather elaborate plugin system, so you can modify the output and integrate custom code as needed.

This "top-down" approach isn't right for everyone, but might be a good fit for a UI designer skill profile. You get to build applications and learn modern JavaScript along the way by examining the output, rather than having to figure out everything from scratch.

(Disclaimer: I wrote a big chunk of the React Studio UI and code export.)

[1] https://hackernoon.com/the-easiest-way-by-far-to-build-a-rea...

Re: My struggle to learn React

#77
post #12

This is a fine article. But I just want to say, as an alternate data point, my experience has been exactly the opposite . I love React. React is the first front-end technology I have ever managed to get to stick. * ES6 is just a detail, I know. But for me, ES6 transforms Javascript from an idiosyncratic scripting language where I constantly have to look up the ordinary way to handle basic programming tasks into somet…

>>* The tooling was a disaster before create-react-app. But now there's create-react-app, so the tooling isn't a problem. But what happens when you inevitably need to step outside the boundaries set by create-react-app? From that perspective, it simply delays the problem, rather than solving it.

My last and current job have both uses react-app-rewired to monkey-patch create-react-app.

Re: My struggle to learn React

#78
post #56

I've been writing Java for 20 years and never for a moment had the least doubt about the value of 'this'. ES6 has been slowly morphing into Java yet it hasn't solved this basic issue very well.

Why did you decide to learn React? Could you share some resources you used to learn it?

Re: My struggle to learn React

#79
I found React one of the easiest frameworks to learn and pick up but I had the benefit of learning React after working for a few years with Backbone and Angular. I found the opinions of the framework to be sensical and guided by the realities of web application development and developer experience.

> 1. i haven’t invested enough time on learning it.

I usually find the types of tutorials Brad references in this section to be very bad at actually connecting with the real process of using a framework. What you're building is just as important as what you're building it with. When you find the right project to use the right tool, it helps the principals click so much more quickly.

> 2. react and es6 travel together

This is definitely a pain point but I think the crux of this is JSX. Most every other convention in React is a very straightforward use of ES6 syntax. Most of the awesome, difficult, but not broadly available parts (generators) of ES6 aren't used in React's public API.

> 3. syntax & conventions

I think React could benefit from a clearer breakdown of how JSX translates to actual JavaScript. Babel's REPL is a good first step. [0]

> 4. getting lost in this-land.

For the most part I've found React's use of JavaScript OOP and `this` to be the most sane. You can use what amounts to a bit of boilerplate in any component that needs state and use `this` within lifecycle methods without batting an eye. Backbone and Angular had all kinds of headaches when trying to explain `this` to junior developers. And don't get me started on libraries that used `this` to pass context around.

> 5. i haven’t found sample projects or tutorials that match how i tend to work.

I think React excels at matching his ideal workflow, but doesn't do a good job explaining how to achieve it. Higher Order components and smart/presentation components are very under-documented.

[0]: https://babeljs.io/repl/#?babili=false&browsers=&build=&buil...

Re: My struggle to learn React

#80

Honestly I don't know how I learned React. It's not fun at all. Oh sure, the basics of React is not too hard. If you ignore all the outdated examples and code (using var, no JSX, overusing component lifecycle, not using functional components). But then learning Redux, React Router, React JSS, Reselect, Redux Thunk, Webpack, etc., is just terrible. Sure, there are tutorials for each individual library, or maybe even t…

>> But the point would be to start with the basics and build up an understanding of why we need these libraries. And what problems they solve and what problems they don't solve.

This is exactly what the well-written official React docs do. It doesn't involve any CSS-in-JS, Redux, Thunking, Webpack, etc.

1) Start off with a basic app - build the Tic-Tac-Toe app through the official React docs

2) Build a simple React app with the official CRA (Create-React-App) tool

3) Build a more complex app

4) Keep building a more complex app, learn about routing, lifecycles, performance...

N) Look into Redux if you need it

---

Re. Redux:

The React docs have jumping off points throughout this process to understand why setState-based state management can get difficult in large applications (prop drilling) and the problems Redux solves. Look at this excellent doc on 'Lifting State Up' (https://reactjs.org/docs/lifting-state-up.html). This makes you go through the motions of setting up a component with setState, lifting state up, and experiencing prop drilling. Redux isn't even mentioned here.

Re. Thunking:

In the 'Basics' section of the Redux tutorial (https://redux.js.org/basics/actions), here's an excellent snippet: "Action creators can also be asynchronous and have side-effects. You can read about async actions in the advanced tutorial to learn how to handle AJAX responses and compose action creators into async control flow. Don't skip ahead to async actions until you've completed the basics tutorial, as it covers other important concepts that are prerequisite for the advanced tutorial and async actions."

Re. Reselect:

Again, in the Basics section, in "Usage with React" (https://redux.js.org/basics/usage-with-react): "These are the basics of the React Redux API, but there are a few shortcuts and power options so we encourage you to check out its documentation in detail. In case you are worried about mapStateToProps creating new objects too often, you might want to learn about computing derived data with reselect."

None of these 'power options' and extra tools are talked about in depth in the Basics sections of any of these docs. They are mentioned as jumping off points and the reader is warned not to dive into them early without continuing with the tutorials/docs. This seems to be exactly what you're looking for...

Post reply on HN