/react-redux-realworld-example-app

An example real world application built with React + Redux

Primary LanguageJavaScript

Class notes

Understanding the codebase

  1. Follow the setup instructions in the README. Preview the application (deployed example site: https://react-redux.realworld.io)
  2. Try and understand how it works. src/index.js is a good place to start. Then ask...
  3. How did they setup react, redux, and react-router together?
  4. How does the Login page work?
  5. How did they structure their files? components/? components/Home/? components/Home/index.js?
  6. How did they use or write redux reducers?
  7. What does src/reducer.js do?

Observations

  • store was a separate file from src/index.js. store is where they import all their reducer logic.
  • Provider is on the outside of Router in index.js
  • Distinct chunks of logic are encapsulated in their own files, and then imported separately

How can it be better

  • Use action creators instead of explicit action objects in your dispatch methods.

    • There's no files for implementing your actions. There's no action creators, so when using mapDispatchToProps, you're calling the whole action when it would be nicer to call the action creator instead.

React + Redux Example App

Example React + Redux codebase that adheres to the RealWorld spec and API.

Redux codebase containing real world examples (CRUD, auth, advanced patterns, etc)

Originally created for this GH issue. The codebase is now feature complete and the RFC is open. Your input is greatly appreciated; please submit bug fixes via pull requests & feedback via issues.

We're currently working on some docs for the codebase (explaining where functionality is located, how it works, etc) but most things should be self explanatory if you have a minimal understanding of React/Redux.

Getting started

You can view a live demo over at https://react-redux.realworld.io/

To get the frontend running locally:

  • Clone this repo
  • npm install to install all req'd dependencies
  • npm start to start the local server (this project uses create-react-app)

For convenience, we have a live API server running at https://conduit.productionready.io/api for the application to make requests against. You can view the API spec here which contains all routes & responses for the server. We'll release the backend code in a few weeks should anyone be interested in it.

Functionality overview

The example application is a social blogging site (i.e. a Medium.com clone) called "Conduit". It uses a custom API for all requests, including authentication. You can view a live demo over at https://redux.productionready.io/

General functionality:

  • Authenticate users via JWT (login/signup pages + logout button on settings page)
  • CRU* users (sign up & settings page - no deleting required)
  • CRUD Articles
  • CR*D Comments on articles (no updating required)
  • GET and display paginated lists of articles
  • Favorite articles
  • Follow other users

The general page breakdown looks like this:

  • Home page (URL: /#/ )
    • List of tags
    • List of articles pulled from either Feed, Global, or by Tag
    • Pagination for list of articles
  • Sign in/Sign up pages (URL: /#/login, /#/register )
    • Use JWT (store the token in localStorage)
  • Settings page (URL: /#/settings )
  • Editor page to create/edit articles (URL: /#/editor, /#/editor/article-slug-here )
  • Article page (URL: /#/article/article-slug-here )
    • Delete article button (only shown to article's author)
    • Render markdown from server client side
    • Comments section at bottom of page
    • Delete comment button (only shown to comment's author)
  • Profile page (URL: /#/@username, /#/@username/favorites )
    • Show basic user info
    • List of articles populated from author's created articles or author's favorited articles