<!DOCTYPE html><html><head><metacharSet="UTF-8"/><title>Frontend Developer Roadmap: Learn to become a modern frontend developer</title><metaname="description"content="Learn to become a modern frontend developer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern frontend development."/><metaname="author"content="Kamran Ahmed"/><metaname="keywords"content="javascript roadmap 2021,frontend roadmap 2021,frontend developer roadmap 2021,guide to becoming a developer,guide to becoming a frontend developer,frontend developer,frontend engineer,frontend skills,frontend development,javascript developer,frontend development skills,frontend development skills test,frontend roadmap,frontend engineer roadmap,frontend developer roadmap,become a frontend developer,frontend developer career path,javascript developer,modern javascript developer,node developer,skills for frontend development,learn frontend development,what is frontend development,frontend developer quiz,frontend developer interview questions"/><metaname="viewport"content="width=device-width, user-scalable=yes, initial-scale=1.0, maximum-scale=3.0, minimum-scale=1.0"/><metahttp-equiv="Content-Language"content="en"/><metaproperty="og:title"content="Frontend Developer Roadmap: Learn to become a modern frontend developer"/><metaproperty="og:description"content="Learn to become a modern frontend developer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern frontend development."/><metaproperty="og:image"content="https://roadmap.sh/brand-square.png"/><metaproperty="og:url"content="https://roadmap.sh"/><metaproperty="og:type"content="website"/><metaproperty="article:publisher"content="https://facebook.com/kamranahmedse"/><metaproperty="og:site_name"content="roadmap.sh"/><metaproperty="article:author"content="Kamran Ahmed"/><metaname="twitter:card"content="summary"/><metaname="twitter:site"content="@kamranahmedse"/><metaname="twitter:title"content="Frontend Developer Roadmap: Learn to become a modern frontend developer"/><metaname="twitter:description"content="Learn to become a modern frontend developer using this roadmap. Community driven, articles, resources, guides, interview questions, quizzes for modern frontend development."/><metaname="twitter:image"content="https://roadmap.sh/brand-square.png"/><metaname="twitter:image:alt"content="roadmap.sh"/><metaname="mobile-web-app-capable"content="yes"/><metaname="apple-mobile-web-app-capable"content="yes"/><metaname="apple-mobile-web-app-status-bar-style"content="black-translucent"/><linkrel="apple-touch-icon"sizes="180x180"href="/manifest/apple-touch-icon.png"/><metaname="msapplication-TileColor"content="#101010"/><metaname="theme-color"content="#848a9a"/><linkrel="manifest"href="/manifest/manifest.json"/><linkrel="icon"type="image/png"sizes="32x32"href="/manifest/icon32.png"/><linkrel="icon"type="image/png"sizes="16x16"href="/manifest/icon16.png"/><linkrel="shortcut icon"href="/manifest/favicon.ico"type="image/x-icon"/><linkrel="icon"href="/manifest/favicon.ico"type="image/x-icon"/><scriptasync=""src="https://www.googletagmanager.com/gtag/js?id=UA-139582634-1"></script><script>
It is a self-contained app with the following parts:</p><ulclass="sc-egiyK gfrORe"><liclass="sc-bqiRlB xTMXv">The state, which is the source of truth that drives our app;</li><liclass="sc-bqiRlB xTMXv">The view, which is just a declarative mapping of the state;</li><liclass="sc-bqiRlB xTMXv">The actions, which are the possible ways the state could change in reaction to user inputs from the view.</li></ul><pclass="sc-bdvvtL kiIUjN">If you've never built a large-scale SPA and jump right into Vuex, it may feel verbose and daunting. That's perfectly normal - if your app is simple, you will most likely be fine without Vuex. A simple store pattern (opens new window)may be all you need. But if you are building a medium-to-large-scale SPA, chances are you have run into situations that make you think about how to better handle state outside of your Vue components, and Vuex will be the natural next step for you. There's a good quote from Dan Abramov, the author of Redux: </p><preclass="sc-furwcr jiGIaj"><styledata-emotion="css 4m8w8z">.css-4m8w8z{display:inline-block;font-family:var(--chakra-fonts-mono);font-size:var(--chakra-fontSizes-sm);-webkit-padding-start:0.2em;padding-inline-start:0.2em;-webkit-padding-end:0.2em;padding-inline-end:0.2em;border-radius:var(--chakra-radii-sm);background:var(--chakra-colors-gray-100);color:var(--chakra-colors-gray-800);}</style><codeclass="chakra-code css-4m8w8z"><quote>Flux libraries are like glasses: you’ll know when you need them.</quote>
</code></pre><styledata-emotion="css 1q2yoq2">.css-1q2yoq2{margin-top:30px;margin-bottom:30px;}</style><divclass="css-1q2yoq2"><styledata-emotion="css 12hj1b5">.css-12hj1b5{opacity:0.6;border:0;border-color:inherit;border-style:solid;border-bottom-width:1px;width:100%;margin-bottom:15px;}</style><hraria-orientation="horizontal"class="chakra-divider css-12hj1b5"/><styledata-emotion="css 18fydfa">.css-18fydfa{line-height:23px;font-weight:500;font-size:14px;color:var(--chakra-colors-gray-500);margin-bottom:10px;}</style><pclass="chakra-text css-18fydfa">This page is a work in progress. Help us by writing a small introduction to the topic and suggesting a few links to read more about this topic.</p><styledata-emotion="css 1m7otm5">.css-1m7otm5{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;white-space:nowrap;vertical-align:middle;outline:2pxsolidtransparent;outline-offset:2px;width:100%;line-height:1.2;border-radius:var(--chakra-radii-md);font-weight:var(--chakra-fontWeights-semibold);transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);height:var(--chakra-sizes-8);min-width:var(--chakra-sizes-8);font-size:var(--chakra-fontSizes-sm);-webkit-padding-start:var(--chakra-space-3);padding-inline-start:var(--chakra-space-3);-webkit-padding-end:var(--chakra-space-3);padding-inline-end:var(--chakra-space-3);background:var(--chakra-colors-gray-100);padding-top:20px;padding-bottom:20px;}.css-1m7otm5:focus,.css-1m7otm5[data-focus]{box-shadow:var(--chakra-shadows-outline);}.css-1m7otm5[disabled],.css-1m7otm5[aria-disabled=true],.css-1m7otm5[data-disabled]{opacity:0.4;cursor:not-allowed;box-shadow:var(--chakra-shadows-none);}.css-1m7otm5:hover,.css-1m7otm5[data-hover]{-webkit-text-decoration:none;text-decoration:none;background:var(--chakra-colors-gray-200);}.css-1m7otm5:active,.css-1m7otm5[data-active]{background:var(--chakra-colors-gray-300);}</style><styledata-emotion="css snd3mg">.css-snd3mg{transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-fast);transition-timing-function:var(--chakra-transition-easing-ease-out);cursor:pointer;-webkit-text-decoration:none;text-decoration:none;outline:2pxsolidtransparent;outline-offset:2px;color:inherit;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;white-space:nowrap;vertical-align:middle;outline:2pxsolidtransparent;outline-offset:2px;width:100%;line-height:1.2;border-radius:var(--chakra-radii-md);font-weight:var(--chakra-fontWeights-semibold);transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);height:var(--chakra-sizes-8);min-width:var(--chakra-sizes-8);font-size:var(--chakra-fontSizes-sm);-webkit-padding-start:var(--chakra-space-3);padding-inline-start:var(--chakra-space-3);-webkit-padding-end:var(--chakra-space-3);padding-inline-end:var(--chakra-space-3);background:var(--chakra-colors-gray-100);padding-top:20px;padding-bottom:20px;}.css-snd3mg:hover,.css-snd3mg[data-hover]{-webkit-text-decoration:underline;text-decoration:underline;}.css-snd3mg:focus,.css-snd3mg[data-focus]{box-shadow:var(--chakra-shadows-outline);}.css-snd3mg:focus,.cs