# MERN Stack Research
# Questions?
Do we advertise teaching redux? We should remove it if so…
How deep should we go into the state-management redux/reducers rabbit-hole?
How much do we need students to actually build theses from scratch versus just modify and implement parts?
# To research:
redux connect()
# Overall project examples:
[MERN without redux boilerplate](https://github.com/abhijeetjuneja/mern-without-redux-boilerplate)
- has validators
- controllers include routes
- authentication middleware
[MERN starter](https://github.com/joshuaslate/mern-starter)
- react redux
- router.js
- auth
- clean simple controllers and models
[Inventory Application](https://github.com/moelashmawy/inventory-application)
- react redux
- full application with multiple user modes
-
----------
# React
## State
hooks
setState
useReducer
useEffect
prop drilling vs context API vs Redux
[Context api vs redux](https://daveceddia.com/context-api-vs-redux/) - Easier to read
[React, Redux, and Context Behavior](https://blog.isquaredsoftware.com/2020/01/blogged-answers-react-redux-and-context-behavior/) - harder to read…
[React official context API guide](https://reactjs.org/docs/context.html)
[you might not need redux](https://www.simplethread.com/cant-replace-redux-with-hooks/) - useful comparison of how to do redux behavior in hooks
[Three principles of redux](https://redux.js.org/understanding/thinking-in-redux/three-principles)
[redux tooklit](https://redux-toolkit.js.org/tutorials/basic-tutorial)
redux fetch data actions - BEGIN, SUCCESS, FAILURE
[Fetching data with redux](https://daveceddia.com/where-fetch-data-redux/)
[explaining thunks](https://stackoverflow.com/questions/35411423/how-to-dispatch-a-redux-action-with-a-timeout/35415559#35415559)
functional vs classes
pure components
higher order components (redux connect or context API wrapper)
[React State Management in 2020](https://medium.com/better-programming/react-state-management-in-2020-719d10c816bf) - local state vs hooks
[React boilerplate](https://github.com/react-boilerplate/react-boilerplate)
----------
# Express
[express.js](https://expressjs.com/)
## index.js
this should initialize the server, probably doesn’t need to be modified
## config
these are your keys, probably don’t need to be modified
## models
one file per model object
Create a mongoose schema, then export the model.
optionally can define methods and such to do things like encrypting password
## controllers
functions which get called by specific routes. work with the models to update the DB.
optionally, this can just include the routing code here.
## routes.js
Can put all the routes in a separate file and then have each route call a specific controller function
## validators
Functions which can validate input datas and generate error messages
## Authentication
using passport or something else to work with auth
salting passwords
using JWT
----------
# Node
package.json
dependencies
scripts
----------
# Mongo
[mongoose](https://mongoosejs.com/docs/guide.html)
## Creating schemas/Models
Creating a schema
Referencing another schema `type: Schema.Types.ObjectId, ref: "Product"` ([subdocuments](https://mongoosejs.com/docs/subdocs.html))
exporting a model
virtual properties
alias
## Searching for an object
findById
findOne
[Queries](https://mongoosejs.com/docs/queries.html)
[.populate](https://mongoosejs.com/docs/populate.html) and .exec - (join) bring in all the connected data from other linked models
## Updating objects (documents)
findOneAndUpdate
.save()
Creating an object / deleting an object
error handling
how to handle async activity. (await vs promises)
[validating objects](https://mongoosejs.com/docs/validation.html) (documents)
[middleware](https://mongoosejs.com/docs/middleware.html)
# Other
[UX Copywork](https://www.smashingmagazine.com/2017/02/improving-ui-design-skills-copywork/)
[React Copywork](https://daveceddia.com/learn-react-with-copywork/)
[Complete guide to React rendering behavior](https://blog.isquaredsoftware.com/2020/05/blogged-answers-a-mostly-complete-guide-to-react-rendering-behavior/)
[The History and Implementation of React-Redux](https://blog.isquaredsoftware.com/2018/11/react-redux-history-implementation/)
# Project One
## React
- primarily use functional components with useState
- maybe show one controlled component with class-based state?
- Try to minimize prop drilling, but don’t venture into context
## Server
- no authentication
- simple schemas (no references)
- at least one variable route with CRUD
## Possible projects:
- TODO app
- Simple, would only be a single todo list and user so that we only have a list of tasks
- Start with those on the backend, eventually transition that to updating a server and storing it in the database.
# Project Two
## React
- Talk about reducers, stores, and actions
- Use context, as a way of avoiding prop drilling
- don’t get into redux in the primary path, but maybe have an optional side module using it.
-
## Server
- Give authentication OOTB and have them create the register and login pages
- Schema has references and must use populate
- multiple routes
## Possible projects:
- ecommerce app
- products
- cart
- checkout process
- login flow and multiple users
- task tracker trello clone
- tasks
- boards
- states
- login flow multiple users
- creating a task and moving it through the states flow
- social network (facebook, twitter, or forum clone)
- posts
- comments
- login flow multiple users
- different boards
- creating a post, letting others comment on it
- upvoting/liking
-