Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

saigontechnology/react-redux-router-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

5 Commits

Repository files navigation

React Redux Router App

Minimalistic React app structure with Redux and React Router

Prerequisite:

Your machine must already installed:

  • NodeJS
  • Yarn

IDE

Techs and libs:

Developers must be familiar with:

Commands:

  • yarn install: Run at first time clone this project or when any module missing.
  • yarn start: Start project at development mode.
  • yarn build: Build project to production.

Project structure:

  • /src
    • index.js
    • App.js: Single app root component.
    • /constants
    • /helpers: Helpers/Utility functions that would be used among modules
      • FetchHelper.js: A wrapper for Fetch API
    • /redux: All setup for Redux (reducers, store, middlewares)
    • /modules: Each module is a feature or re-used components
      • /common: A special module which contains many reused components among the app. Some components in here can be separate in to their own module if nessessary.
      • /module1: A module may relate to a feature. It contains many components, pages, actions, reducers, services, ... which are highly relate to each other.
        • index.js: All module items which are needed to be used from outside need to be export from here. From the outside, avoid to import module item directly.
        • /actions: Redux actions
        • /components: React components, could be separated into 2 directories: containers and presenters if nessessary.
        • /reducers: Redux reducers
        • /...: More directories if nessessary.
      • /module2
      • /...

FetchHelper Receipts

Handle server error:

import FetchHelper from './src/helpers/FetchHelper.js'
FetchHelper.addAfterResonseInterceptor(resp => {
 if (resp.status === 500){
 //show error message
 }
 if (resp instanceof Error){
 //handle error. This is likely caused by the network connection.
 }
})

Fetch JSON data

import FetchHelper from './src/helpers/FetchHelper.js'
import {api_root} from './src/constants'
FetchHelper.fetch(`${api_root}api/data.json`)
.then(([data, status]) => { 
 // 'data' is JSON object. If server does not response JSON then 'data' is Response object.
 if (status === 200){
 //handle data
 }else{
 //show error message
 }
})

Or

async function requestData(){
 const [data, status] = await FetchHelper.fetch(`${api_root}api/data.json`)
 if (status === 200){
 //handle data	
 }else{
 //show error message
 }
}

Post JSON data

import FetchHelper from './src/helpers/FetchHelper.js'
import {api_root} from './src/constants'
FetchHelper.fetch(`${api_root}api/products`, {
 method: 'POST',
 body: JSON.parse({
 name: '...',
 type: '...'
 })
}).then(([data, status]) => {
 if (status === 200){
 //handle data
 }else{
 //show error message
 }
})

Post form url encoded data

import FetchHelper from './src/helpers/FetchHelper.js'
import {api_root} from './src/constants'
FetchHelper.fetch(`${api_root}/api/categories`, {
 method: 'POST',
 headers: {
 'Content-Type': FetchHelper.FORM_URL_ENCODED,
 },
 body: FetchHelper.jsonToForm({
 name: '...',
 type: '...'
 })
}).then(([data, status]) => {
 if (status === 200){
 //handle data
 }else{
 //show error message
 }
})

About

Minimalistic React app with Redux and React Router

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /