Voting App Using React Redux

Redux provides an easy way to centralize the state of your application. There are three basic properties to know in Redux. Action, Store, Reducer. We will cover all these properties one by one.

The Redux Cycle

The redux cycle is composed of Action, Store and Reducers. Action is like a message that we send or dispatch to our central Redux Store. The Store is the central part and it saves the global app state. Reducers calculates the next state ie. they handles the main flow. If any change in state occurs, the reducer will check which action type is triggered and then reducer changes the state for that particular action type.

I have learned about the basic redux flow. I created a voting app which with the help of redux will do comparison between three technologies.

The Basic Directory Structure

In the above image, there is a src folder which contains the main flow of the application. It has sub-directories such as components, reducers and actions.

In actions folder → index.js

// Define action types as constants export const VOTE_REACT = 'VOTE_REACT'; export const VOTE_ANGULAR = 'VOTE_ANGULAR'; export const VOTE_VUEJS = 'VOTE_VUEJS'; // Action creators export const voteReact = () => { return { type: VOTE_REACT }; } export const voteAngular = () => { return { type: VOTE_ANGULAR }; } export const voteVueJs = () => { return { type: VOTE_VUEJS }; }
Code language: JavaScript (javascript)

The above index.js file contains the action type for three technologies – Angular, React and VueJs.

In reducers→ index.js

const initialState = { angular: 0, react: 0, vuejs: 0 } export default (state = initialState, action) => { switch (action.type) { case 'VOTE_ANGULAR': console.log('Vote Angular!'); return Object.assign({}, state, { angular: state.angular + 1 }); case 'VOTE_REACT': console.log('Vote React!'); return Object.assign({}, state, { react: state.react + 1 }); case 'VOTE_VUEJS': console.log('Vote VueJs'); return Object.assign({}, state, { vuejs: state.vuejs + 1 }); default: return state; } }
Code language: JavaScript (javascript)

In the above index.js file, the reducer takes 2 arguments (state, action). So depending upon the type of the action the reducer changes the state and returns it to the global store.

In src→ index.js

import React from 'react'; import ReactDOM from 'react-dom'; import { createStore } from 'redux'; import './index.css'; import App from './App'; import myApp from './reducers'; import Results from './components/results'; import registerServiceWorker from './registerServiceWorker'; // Create the Redux store for the application let store = createStore(myApp); function render() { ReactDOM.render( <App />, document.getElementById('root') ); registerServiceWorker(); } store.subscribe(render); render();
Code language: JavaScript (javascript)

This index.js is the file where you initialize the app and call ReactDom.

src→ App.js

import React, { Component } from 'react'; import { voteAngular, voteReact, voteVueJs } from './actions/index'; import './App.css'; class App extends Component { constructor(props) { super(props); this.store = this.props.store; } handleVoteAngular = () => { this.store.dispatch(voteAngular()); } handleVoteReact = () => { this.store.dispatch(voteReact()); } handleVoteVueJs = () => { this.store.dispatch(voteVueJs()); } render() { return ( // Your JSX code goes here ); } } export default App;
Code language: JavaScript (javascript)

What is your favorite front-end framework in 2017

The above App.js is the main component of the react application.

Components→ results.js

import React, { Component } from 'react'; export default class Results extends Component { constructor(props) { super(props); this.store = this.props.store; } votesAngularInPercent() { if (this.store.getState().angular) { return (this.store.getState().angular / (this.store.getState().angular + this.store.getState().react + this.store.getState().vuejs)) * 100; } else { return 0; } } votesReactInPercent() { if (this.store.getState().react) { return (this.store.getState().react / (this.store.getState().angular + this.store.getState().react + this.store.getState().vuejs)) * 100; } else { return 0; } } votesVueJsInPercent() { if (this.store.getState().vuejs) { return (this.store.getState().vuejs / (this.store.getState().angular + this.store.getState().react + this.store.getState().vuejs)) * 100; } else { return 0; } } votesAngularInPercentStyle() { return { width: this.votesAngularInPercent() + "%", }; } votesReactInPercentStyle() { return { width: this.votesReactInPercent() + "%", }; } votesVuejsInPercentStyle() { return { width: this.votesVueJsInPercent() + "%", }; } render() { return ( <div> <span className="label label-danger"> Angular: {this.votesAngularInPercent().toFixed(2) + '%'}</span> <div className="progress progress-striped active"> <div className="progress-bar progress-bar-danger" style={this.votesAngularInPercentStyle()}></div> </div> <span className="label label-danger"> React: {this.votesReactInPercent().toFixed(2) + '%'}</span> <div className="progress progress-striped active"> <div className="progress-bar progress-bar-danger" style={this.votesReactInPercentStyle()}></div> </div> <span className="label label-danger"> VueJs: {this.votesVueJsInPercent().toFixed(2) + '%'}</span> <div className="progress progress-striped active"> <div className="progress-bar progress-bar-danger" style={this.votesVuejsInPercentStyle()}></div> </div> </div> ); } }
Code language: JavaScript (javascript)

The above results.js file contains the component called Result.

All the components of the application will come under the components folder.

The output of the above application


Posted

in

by

Recent Post

  • LLMOps Essentials: A Practical Guide To Operationalizing Large Language Models

    When you engage with ChatGPT or any other Generative AI tool, you just type and enter your query and Tada!! You get your answer in seconds. Ever wondered how it happens and how it is so quick? Let’s peel back the curtain of the LLMs a bit. What actually happens behind the screen is a […]

  • Building Intelligent AI Models For Enterprise Success: Insider Strategies 

    Just picture a world where machines think and learn like us. It might sound like a scene straight out of a sci-fi movie, right? Well, guess what? We are already living in that world now. Today, data, clever algorithms, and AI models are changing the way businesses operate. AI models are serving as a brilliant […]

  • Introducing Google Vids in Workspace: Your Ultimate AI-Powered Video Creation Tool

    Hey there, fellow content creators and marketing gurus! Are you tired of drowning in a sea of emails, images, and marketing copy, struggling to turn them into eye-catching video presentations? Fear not, because Google has just unveiled its latest innovation at the Cloud Next conference in Las Vegas: Google Vids- Google’s AI Video Creation tool! […]

  • Achieve High ROI With Expert Enterprise Application Development

    Nowadays modern-day enterprises encounter no. of challenges such as communication breakdown, inefficient business processes, data fragmentation, data security risks, legacy system integration with modern applications, supply chain management issues, lack of data analytics and business intelligence, inefficient customer relationship management, and many more. Ignoring such problems within an organization can adversely impact various aspects of […]

  • State Management with Currying in React.js

    Dive into React.js state management made easy with currying. Say goodbye to repetitive code and hello to streamlined development. Explore the simplicity and efficiency of currying for your React components today!

  • How Much Does It Cost to Develop an App in 2024?

    The price of bringing your app to life typically ranges from $20,000 to $200,000. This cost varies based on factors like which platform you choose, the complexity of features you want, and the size of your intended audience. However, costs can climb even higher for more complex projects, reaching up to $350,000.