Billedresultat for redux image Exercise: Redux part 1 (Actions, Reducers and Store)

Idea: Introduction to Redux (Vanilla).
Background: Actions Reducers and Store

In this exercise you have to create a very simple Javascript (vanilla) App using Redux to handle user events.
It could look like this:

The user can click on a button to change the color of the big square.


Step 1 (project creation and adding Redux and semantic-ui)
Open VSCode and create a new folder 'color' with 2 files 'index.js' and a "default" 'index.html' page.

In the html-file, add a cdn for 'semantic-ui' and 'redux' and a script-tag to include the index.js file:

<link rel="stylesheet" href="">

<script src=""></script>
<script src="index.js"></script>


Step 2 (Buttons and Label)
Add 3 Buttons and a Label/Canvas to the page. Add relevant id's and class's to the elements.


Step 3 (Actions and Action Creators)
In this projekt we have only 3 simple actions: {type : 'RED'} {type : 'BLUE'} and {type : 'GREEN'}.
Implement 3 action creator functions: red( ), blue( ) and green( ). Each returning their matching action object.

Step 4 (Reducers)
Create a reducer function: colorReducer(state, action). The function should take a color/state and an action object as arguments and return a new color/state.
Hint: The color/state could be a css-class name. If the function return a new css-class name - the return value can be used in a render-function to set the class property
of the Label/Canvas and change the elements color.

Step 5 (Store)
Use Redux.createStore(reducer) to create a new Store and assign the new Store to a const: store

Step 6 (Render-function)
Create a function render() to set the className of the Label/Canvas. The function will be used as callback-function to store.subscribe(callback).
Hint: If the Label/Canvas have an id, use: document.getElementById("id").className = store.getState().toString( )


Step 7 (subscribe)
The Store object have a subscribe method, that takes a callback-function as argument. The Store invokes the callback funktion when the state in the store has changed.
Call store.subscribe(render) - and render( ) will be invoked every time the state has changed.


Step 8 (onclick and store.dispatch(action))
For each button, add an eventhandler to the onClick-event. A click on a button should result in a call of the dispatch-method on the store object.
Hint: Use store.dispatch(action) and use the action creation function to create the action-argument.

Congratulation! - Redux is great, and so are you!!

/ Henrik H