For those who are not familiar with React, here's some more details/helpful
links on the underlying technologies.

1) You'll notice that the app is written in ES6 and not ES5 (i.e. the
javascript you're likely familiar with). As of React 0.13.x, ES6 with a
transpiler (i.e. a tool to compile the ES6 syntax into vanilla ES5 syntax)
is the preferred method of writing React apps. For more details on the new
ES6 features you can read this: http://babeljs.io/docs/learn-es2015/ (babel
is the transpiler used by the demo).

2) The next thing you'll notice is that the components weirdly intermingle
javascript and HTML. This is a React feature called JSX. JSX lets you
express DOM-like components in a more natural style. You *can* create React
components using pure-JS, but JSX is the recommended way to do so. For more
details on JSX I'd recommend reading:
https://facebook.github.io/react/docs/jsx-in-depth.html.

3) With the syntax-strangeness out of the way, the next thing to understand
is React itself. React simplifies building high performance JS apps in a
couple of ways: first, it removes two-way binding, which in complex apps
can make reasoning about what causes what to change and when very
difficult, and second: it provides a virtual DOM. The slowest part of
JS-driven apps is updating the DOM. With React, when your data changes your
components are only re-rendered if they've actually changed; this is
accomplished via the virtual DOM. Components are first rendered into the
virtual DOM and then the new tree is compared against the current one, and
only the portions of the tree that are changed are actually rendered into
the page. For more details about React in general, I'd recommend reading
the React docs themselves:
https://facebook.github.io/react/docs/getting-started.html.

4) Finally, the last architectural piece of the demo is Flux. Flux is a
replacement for the traditional MVC model. It provides a unidirectional
data flow for responding to events. Essentially the user interacts with the
app which causes Actions to be sent to the Dispatcher. Stores listen for
events from the Dispatcher and update their state. This causes Views (in
our case React components) to re-render, at which point the cycle begins
anew. You can read more about Flux here:
https://facebook.github.io/flux/docs/overview.html.

This stuff is relatively new to me as well, so there's a better than zero
chance that there's room for improvement with the way the demo is
implemented. but I think it serves as a good starting point for a
discussion about whether this style of application is palatable.

Cheers,

Joshua

On Wed, Jul 15, 2015 at 6:28 PM, Joshua Cohen <jco...@twopensource.com>
wrote:

> As mentioned during the IRC meeting earlier this week. I spent some time
> recently putting together a React-driven UI prototype as a strawman for a
> discussion about potentially moving away from Angular for the UI. This
> prototype is now available on Github:
> https://github.com/jcohen/aurora-react.
>
> As mentioned in the README, the project is very simple. It doesn't
> actually talk to the Scheduler and it only contains two pages (of which
> only one attempts to render data). It also uses the current UI layout for
> convenience. The intention to use it as a way to judge whether this style
> of app is preferable to Angular or if we should renew our investment in the
> current Angular based UI and pay down the tech debt that it has accrued.
>
> Interested to hear everyone's thoughts!
>
> Cheers,
>
> Joshua
>

Reply via email to