CSS Is More Powerful Than You Think! Building React Search in CSS

This ad is not shown to multipass and full ticket holders
JSNation US
JSNation US 2025
November 17 - 20, 2025
New York, US & Online
See JS stars in the US biggest planetarium
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation US 2025
JSNation US 2025
November 17 - 20, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

CSS Is more powerful than we usually give it credit for. Let's see together how we can make use of CSS to build together fully functioning filtering capabilities into an emoji-picker component, improving performance while at it.


We will use some old and new techniques, and combine them in creative ways to turn a slow, laggy experience into a responsive and modern searching capability.


We'll learn about the advancements in CSS, and discover the untapped potential of CSS for building dynamic UIs.

This talk has been presented at React Advanced 2024, check out the latest edition of this React Conference.

FAQ

Evatar Alush is a software engineer at Meta and the author of several open source packages, passionate about open source, API design, and building tools for developers.

EmojiPicker React is a popular EmojiPicker component for React with hundreds of thousands of weekly downloads, featuring a full set of emojis, skin tone options, emoji styles, and a search capability.

Evatar Alush solved the slow search capability issue in EmojiPicker React by using CSS to improve performance and reduce lag during searches.

He used CSS techniques to manipulate the DOM for faster rendering and created a local state to handle searches more efficiently without relying on global state updates.

Flareup is a CSS in JS library created by Evatar Alush, designed for NPM packages and open-source libraries, ensuring compatibility across various environments, including SSR and CSR.

He wanted to avoid forcing users to install third-party libraries and aimed to solve performance issues using CSS techniques instead.

EmojiPicker React includes a complete emoji set, different skin tones, various emoji styles (Apple, Twitter, Google, Facebook), and a search function.

Flareup simplifies the integration by placing CSS directly into the DOM, ensuring it works in both server-side and client-side rendering without additional configuration.

Evatar Alush focuses on open source development, API design, and building developer tools, with a particular interest in improving web performance through innovative solutions.

Evatar Alush lives in Tel Aviv with his wife.

Evyatar Alush
Evyatar Alush
23 min
28 Oct, 2024

Comments

Sign in or register to post your comment.
  • Victor Homyakov
    Victor Homyakov
    -
    One of the few people who cares about performance
  • Va Da
    Va Da
    P4
    Emojis for the win!
Video Summary and Transcription
Hello, everybody. Today, I'm going to talk about how I solved actual challenges in React using only CSS. One of the main packages I maintain is EmojiPicker React, with hundreds of thousands of weekly downloads. It has all the features you'd expect from an EmojiPicker, but the search capability was slow. I managed to fix it using CSS. Let me show you how. The search functionality relies on global state and requires updating each emoji individually, resulting in excessive DOM work. Virtualization or virtual scrolling is not a viable solution due to the non-uniform emoji list. By examining the DOM, I discovered that each emoji had an area label with search-related information. This led me to investigate further and implement a solution from scratch. We create a new component called CSS search, which takes a value as a string. If the value is empty, we return null. We remove all emojis from the emoji list if there are search results. Emojis that match the search term are displayed. Performance is instantaneous. Empty categories are removed using the CSS has attribute. The CSS not and has selectors are used to remove empty categories. A counter is used to display the count of emojis found. By using flexbox and order, we can position the after element at the beginning of the list. CSS nesting allows us to nest everything under the emoji list, simplifying the structure. The performance of the search is still very fast. I created the flareup package, a CSS in JS library specifically for NPM packages. Flareup solves compatibility issues and works on SSR and CSR. Emoji-picker-react uses flareup to render emojis without JavaScript. Flareup places a style element on the DOM, making it easy to use.

1. Introduction to CSS in React

Short description:

Hello, everybody. Today, I'm going to talk about how I solved actual challenges in React using only CSS. One of the main packages I maintain is EmojiPicker React, with hundreds of thousands of weekly downloads. It has all the features you'd expect from an EmojiPicker, but the search capability was slow. I managed to fix it using CSS. Let me show you how.

Hello, everybody. My name is Evatar Alush. I'm a software engineer at Meta. I'm the author of several open source packages. Very much passionate about open source, API design, and building tools for other developers. I live in Tel Aviv with my beautiful wife. And I'm also the humble servant of this mighty creature.

Today, I'm going to step just a little bit outside of my comfort zone because while I usually talk about JavaScript, TypeScript, Node, building packages, React, today I'm going to talk about something different. I'm going to talk about CSS. And more specifically about how I solved actual challenges in React using only CSS.

You see, one of the main packages that I maintain is EmojiPicker React, which is one of the most popular EmojiPicker components in React or in general, actually, with hundreds of thousands of weekly downloads. And it has most of the features you would expect from a standard EmojiPicker. So it has the entire set of emojis. It has different skin tones that you can pick from. It has different styles of emojis. So you got Apple, Twitter, Google, and Facebook. And it also has searching capability. And I'll type something and you can pretty easily see that the search is quite snappy. It appears immediately. The search results appear immediately. And, well, that's what you would expect from a search component in an EmojiPicker.

But it wasn't always the case. You see, when I created the EmojiPicker back in 2017, the search capability was quite slow. And the main issue that I would always get in the GitHub page of the project was, search is laggy. We cannot use search. It takes up to two seconds to search anything. And that's not acceptable. And I managed to fix it, mostly using CSS. And before I show you how I did it, I want to show you what it felt like before actually implementing the fix. So I'll go back to the demo component that I created.

2. Challenges with EmojiPicker Search

Short description:

And this is the EmojiPicker without that fix. The search capability is slow and causes a lag when typing. It takes several seconds for the search results to update, making it unacceptable. The search functionality relies on global state and requires updating each emoji individually, resulting in excessive DOM work. Virtualization or virtual scrolling is not a viable solution due to the non-uniform emoji list.

And this is the EmojiPicker without that fix. So just the way it was before. And I'll type something and you'll notice a slight lag. So I'm typing the letter K now. And it took, I don't know, like half a second to re-render. And, well, not that bad, you would say. But if it happens for each of the keystrokes, that's not comfortable.

And I'm using actually a very high-end MacBook Pro, but what about actual users in the wild who do not have high-end machines? Let's see what it feels for them. So let's go to the Performance tab in Chrome DevTools and let's try to slow it down, say at time six. And let's see what this feels like for users in the wild. So I'll let you know when I actually type something so you can time it yourself. So I'm typing the letter K now. And that took almost, I don't know, two seconds to actually see anything updating. And obviously, if I type more characters, you'll see that it gets shorter and shorter because it has less emojis to filter from. But still, that's unacceptable.

And why is that? Well, as you can see here, the search is up here at the header. It's completely distant from the emoji list component. So everything we want to update here has to go through some global state in the picker and then go back down to the emoji list before anything happens. And then it has to update each and every emoji that needs to be removed or re-added. So that's a lot of work to do on the DOM. And that's the most labor-intensive work, actually. So we got global state update. We got state diffing for each of the components. We got DOM diffing for each of the components. And then we have to actually re-render everything. And if I show you what happens is, well, when I go to the components tab in React DevTools, I can actually highlight the state changes and the re-renders. And you'll see here that we re-render everything. And, well, you could say I could use some virtualization or virtual scrolling. But, well, first of all, the emoji list is not uniform. So we got the titles that take full width.

3. Exploring a Different Approach

Short description:

We encountered challenges with non-full lists and the complexity of the grid. Using a third-party library was not an option, so I explored a different approach. By examining the DOM, I discovered that each emoji had an area label with search-related information. This led me to investigate further and implement a solution from scratch. I replaced the global useFilterHook with a local state in the component, allowing for more control and reactivity.

We got non-full lists. It's a very complex grid. And also, this might require a third-party library. And, well, I don't want to use a third-party library. I don't want to force you to install any third-party library just because you installed my package. So I decided not to do that and instead solve it in a different way.

And the way I found it, well, I tried to look at the DOM of the emoji picker and see what I had there. And the first thing I noticed is, well, a while back I added an area label for each of the emojis. And an area label is an HTML property that we add some description for the element that we're looking at so that visually impaired people, users of our website or people who use a screen reader, could actually know what's there. So for each of the emojis, we use the entire name of the emoji or the search term of the emoji as the area label. So we have some search-related information already in the DOM. And I thought, well, maybe I can make use of that somehow. So that sent me digging. And let's go now to the code and try to implement it from scratch.

Now we have the component the way it was before. So we have the input component inside of the search component and it uses a global useFilterHook. And this useFilterHook updates a global state and then when we change here, and then re-renders in a different place. So let's remove all that because we don't really want to use it anymore. Let's try to do something different. And well, the first law of React, you actually have to have state for re-render. So let's add a local state just for this component. So let's do this const value setValue and let's set it with an empty string. Cool. Now, oh, let's import a new state. Cool. Now, nothing will actually happen even if we set the value because nothing is actually reacting to this value. Oh, let's just do this. Cool. Okay.

4. Implementing CSS Search

Short description:

We create a new component called CSS search, which takes a value as a string. If the value is empty, we return null. We add a style element to apply CSS on the DOM as a string.

Okay. So if I try to now do anything here, you will see that we're not seeing any response to that. So why can't we do with this information? Well, let's create a new component right next to this one. And let's call it CSS search dot TSX. And let's import. Always React from React. Cool. Let's now do export default function CSS search. And let's take value and value is going to be a string. Value is a string.

Cool. Now, if value is empty. Oh. Let's return null. And otherwise, let's also return null because I don't know what to do with it yet. So let's use CSS search just to see that it's there. So CSS search. And let's pass it the value. Cool. So no errors. But again, nothing happens. We're not really rendering anything new. But the cool thing appears now. So I'm going back to CSS search. And what I want to do is add a new style element. And everybody will tell you don't do this and you probably shouldn't. But it works, I guess. So why not? And what the style tag does is actually apply some CSS on the DOM as a string. And again, people will warn you from that. But in this case, it works pretty well.

5. Implementing Emoji Search

Short description:

We remove all emojis from the emoji list if there are search results. We find all emojis that have the correct value in their area label and display them.

So let's do this. And what I want to do, first of all, is take the emoji list and say that, well, just remove everything. Remove all the emojis in case we have some search results. So first of all, we have the emoji list. So it's called what is the element of the emoji list? EPR emoji list. Let's take that one. Oh. Oh, it has to be a string. Right. Just like that. And then let's say that button EPR emoji. That's the element for each of the emojis. And let's do display none. So what's going on here is that if we have a value, if we don't have a value, we're not doing anything. But if we do have value, we're just removing all of the emojis. And well, let's type something. Oh, we don't have any emojis. That's half of the work. Now we have to actually make the other ones that need to appear appear. So let's do this. First of all, let's try to find all of the emojis that actually have the correct value in them. So what we want to do is again go to this one and then search for all of the emojis that have the area label with our value. So let's do something like this. We can have a property selector for area label. And then the cool part is that we can do a partial match. So it can be either in the beginning, the end, or in the middle. And what we want to do here is when it equals our value. And this is the cool part. If it equals our value, let's display flex. Now all the emojis, if I do not make any mistake there, all of the emojis that have our value somewhere in their area label.

6. Improving Emoji Search

Short description:

Emojis that match the search term are displayed. Performance is instantaneous. Empty categories are removed using the CSS has attribute.

It could be again in the beginning, the end, or the middle. They will be displayed flex. So let's start typing. K, I, N, G. Now we're seeing some results and only the emojis that actually have this. So we have winking, walking, biking, drinking, cooking, and clinking glasses. We have all of the emojis that actually have this term. So this is pretty cool. And this was two lines of CSS.

Let's see the performance here before we continue to the rest of it. So let's try. Well, this is instantaneous. And let's try to see with the throttling of the performance. And again, pretty instantaneous. So I like it already. But let's improve upon that. So let's see what we can do more.

On top of that, you saw here that we also have these empty categories. Now in the state-based version, we could filter out all of the categories that were empty because we knew that already. But in CSS, we removed everything. But the category does not have the title itself. It does not have the emoji name. That's why it's not disappearing. So what do we do here? Well, this is pretty cool because in CSS recently, and by recently, I mean two years ago, they added the has attribute, or the has to the selector, sorry, that allows us to select based on the children of a given selector. And this allows us to actually check if our title or if our emoji group has the actual emojis that we're searching for or not. And if they do not exist there, we'll just make them remove themselves. So let's do this. So let's take off this emoji list and let's do EPR emoji category. And then we're saying not.

7. Enhancing Emoji Search

Short description:

The CSS not and has selectors are used to remove empty categories. A counter is used to display the count of emojis found.

And then we're saying not. Not is the pseudo-selector that negates everything that comes within it. And then we're saying has. So where it does not have our area label or the specific element with the area label. And now what we're going to do is again display none.

Now, if I start searching here, let's see what happens. Wait. We're seeing that we don't have any empty categories. And that's again just by adding this tiny part. Now, they'll tell you, and this is probably true, that combination of not and has is not very performant. But again, you cannot compare it to what was in the JavaScript-only version of it. So I find it a pretty reasonable compromise.

Now, we also don't have good search without the counting of search results. So what can we do here? Well, CSS cannot count, can it? It can? Well, let's see. So what we can do here is something pretty cool. And this is one of the oldest cool CSS tricks that we have and not many use it. By the way, for a good reason. But just for the sake of it, let's do it. It's called a counter. And we can do counter reset. And say we'll call it emojis and set it to zero. And then for each of the elements that we're showing, we can actually counter increment by one. So let's do counter increment by one. And the next thing that we want to do is actually show it. So let's do before. So let's do EPR emoji list. And what we want to do is before, we want to show in the content of that element the actual counter. So content, content, counter, emojis. And what we want to do here is say emojis found. And this will show the count of emojis.

8. Optimizing Emoji Search

Short description:

The counter works by going element by element and incrementing, but it doesn't work in the before element. To solve this, we can use the after element. By using flexbox and order, we can position the after element at the beginning of the list. CSS nesting allows us to nest everything under the emoji list, simplifying the structure. The performance of the search is still very fast.

But if I start typing, let's see, we'll see zero emojis found. Wait, but I promised you a counter here. Well, apparently the way the counter works is that it goes element by element by element, increment by increment by increment, and then adds everything. But in our before element, well, way before each of the elements were found, so we don't have any matches. So what could we do?

We could do after, right? But if I do it with it after, well, it's down here. This is not good because we don't want to scroll all the way to the bottom just to show that. So what can we do? Well, this is another cool trick. What we want to do here is say that the emoji list should be displayed flex. And, well, the next thing that we want to do is let's do order minus one for the after. And this will pull the after element all the way to the beginning of the emoji list.

So what happens now is that I type, and, well, you'll see that because we turned it into flex, then it's obviously all messed up. So let's also flex direction column, and let's refresh. Okay, so now we're seeing that we have 353 emojis found. We have the entire list all sorted correctly. And, well, let's see what's going on. Yeah, we have a working count. Let's add some space here. Cool.

Now, another cool thing that we can do just with CSS, well, or another cool improvement upon CSS that they added recently is CSS nesting. So this is pretty convoluted, I would say, and this is pretty complex. But what if we could just nest everything under the emoji list? So I'm just going to fix it real quick and move everything to be under the emoji list. That's pretty cool. And even the after element, or the after pseudo element, should work as well, just like this. And now if I refresh and start typing, we'll see that everything works as it worked just before. So I think this is pretty cool. And again, let's try to compare it to what it was before in terms of performance. Let's slow it down, and let's try to see how much time it takes. Oh my God, I refreshed it while throttling. Okay, let's try again. And even while throttling, this is pretty instantaneous.

9. Expanding Usage with flareup

Short description:

We can observe the state updates in the components tab, and the search bar gets updated. CSS Nesting may not be supported in all browsers. I created the flareup package, a CSS in JS library specifically for NPM packages. Flareup solves compatibility issues and works on SSR and CSR. Emoji-picker-react uses flareup to render emojis without JavaScript. Flareup places a style element on the DOM, making it easy to use.

And let's see again the components tab and see the state updates, and let's see what's going on in here. And as I type, we're seeing that only the search bar gets updated. Now let's see our outcome DOM. So we got this style here, oh, not that style, let's see here. Yes, we got that style element with all our changes here. So this is pretty cool. By the way, CSS Nesting is not yet supported in all browsers I think, or at least not legacy browsers, so check your compatibility as well.

And this is pretty, pretty awesome, I think. And well, this worked quite well. And it led me to try to think if this works quite well, what else this could be used for. And then I created another package, it's called flareup, which is a CSS in JS library that takes this concept to the next level. It's based on the syntax of stylex, the Facebook meta CSS in JS library, but this one is specifically made for NPM packages.

What I noticed is that when building an NPM package like emoji-picker-react, there's always a problem. It doesn't work on SSR for some of the users, it doesn't work with this bundler or that bundler, or they need to import differently, or I have to assume they use some CSS preprocessor. And I thought, well, I want this to just work for everybody. So I created flareup, which is a CSS in JS library intended just for NPM packages and just for open-source libraries that are not application-based and are not applications. And well, it does pretty much the same thing. It takes the CSS, puts it on a DOM, and it just works. It works on SSR, it works in CSR. Actually, I can show you emoji-picker-react uses only this, only flareup. And if I will try to render the emoji-picker without any JavaScript on, it will still come from the server without any problem. Obviously, nothing will happen here because it's static without any JavaScript and without any React. But again, flareup does the rest of it. And the way it works, again, is by placing this, I would say, massive, but still style element right on the DOM of the picker. So this is pretty cool as well.

Thank you so much. It was a pleasure. And enjoy the rest of the conference. Thank you.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

A Guide to React Rendering Behavior
React Advanced 2022React Advanced 2022
25 min
A Guide to React Rendering Behavior
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Don't Solve Problems, Eliminate Them
React Advanced 2021React Advanced 2021
39 min
Don't Solve Problems, Eliminate Them
Top Content
Kent C. Dodds discusses the concept of problem elimination rather than just problem-solving. He introduces the idea of a problem tree and the importance of avoiding creating solutions prematurely. Kent uses examples like Tesla's electric engine and Remix framework to illustrate the benefits of problem elimination. He emphasizes the value of trade-offs and taking the easier path, as well as the need to constantly re-evaluate and change approaches to eliminate problems.
Speeding Up Your React App With Less JavaScript
React Summit 2023React Summit 2023
32 min
Speeding Up Your React App With Less JavaScript
Top Content
Watch video: Speeding Up Your React App With Less JavaScript
Mishko, the creator of Angular and AngularJS, discusses the challenges of website performance and JavaScript hydration. He explains the differences between client-side and server-side rendering and introduces Quik as a solution for efficient component hydration. Mishko demonstrates examples of state management and intercommunication using Quik. He highlights the performance benefits of using Quik with React and emphasizes the importance of reducing JavaScript size for better performance. Finally, he mentions the use of QUIC in both MPA and SPA applications for improved startup performance.
React Concurrency, Explained
React Summit 2023React Summit 2023
23 min
React Concurrency, Explained
Top Content
Watch video: React Concurrency, Explained
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.
Jotai Atoms Are Just Functions
React Day Berlin 2022React Day Berlin 2022
22 min
Jotai Atoms Are Just Functions
Top Content
State management in React is a highly discussed topic with many libraries and solutions. Jotai is a new library based on atoms, which represent pieces of state. Atoms in Jotai are used to define state without holding values and can be used for global, semi-global, or local states. Jotai atoms are reusable definitions that are independent from React and can be used without React in an experimental library called Jotajsx.
How React Compiler Performs on Real Code
React Advanced 2024React Advanced 2024
31 min
How React Compiler Performs on Real Code
Top Content
I'm Nadia, a developer experienced in performance, re-renders, and React. The React team released the React compiler, which eliminates the need for memoization. The compiler optimizes code by automatically memoizing components, props, and hook dependencies. It shows promise in managing changing references and improving performance. Real app testing and synthetic examples have been used to evaluate its effectiveness. The impact on initial load performance is minimal, but further investigation is needed for interactions performance. The React query library simplifies data fetching and caching. The compiler has limitations and may not catch every re-render, especially with external libraries. Enabling the compiler can improve performance but manual memorization is still necessary for optimal results. There are risks of overreliance and messy code, but the compiler can be used file by file or folder by folder with thorough testing. Practice makes incredible cats. Thank you, Nadia!

Workshops on related topic

React Performance Debugging Masterclass
React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured Workshop
Ivan Akulov
Ivan Akulov
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React, TypeScript, and TDD
React Advanced 2021React Advanced 2021
174 min
React, TypeScript, and TDD
Top Content
Featured Workshop
Paul Everitt
Paul Everitt
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
Web3 Workshop - Building Your First Dapp
React Advanced 2021React Advanced 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured Workshop
Nader Dabit
Nader Dabit
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
Next.js 13: Data Fetching Strategies
React Day Berlin 2022React Day Berlin 2022
53 min
Next.js 13: Data Fetching Strategies
Top Content
Workshop
Alice De Mauro
Alice De Mauro
- Introduction- Prerequisites for the workshop- Fetching strategies: fundamentals- Fetching strategies – hands-on: fetch API, cache (static VS dynamic), revalidate, suspense (parallel data fetching)- Test your build and serve it on Vercel- Future: Server components VS Client components- Workshop easter egg (unrelated to the topic, calling out accessibility)- Wrapping up
Remix Fundamentals
React Summit 2022React Summit 2022
136 min
Remix Fundamentals
Top Content
Workshop
Kent C. Dodds
Kent C. Dodds
Building modern web applications is riddled with complexity And that's only if you bother to deal with the problems
Tired of wiring up onSubmit to backend APIs and making sure your client-side cache stays up-to-date? Wouldn't it be cool to be able to use the global nature of CSS to your benefit, rather than find tools or conventions to avoid or work around it? And how would you like nested layouts with intelligent and performance optimized data management that just works™?
Remix solves some of these problems, and completely eliminates the rest. You don't even have to think about server cache management or global CSS namespace clashes. It's not that Remix has APIs to avoid these problems, they simply don't exist when you're using Remix. Oh, and you don't need that huge complex graphql client when you're using Remix. They've got you covered. Ready to build faster apps faster?
At the end of this workshop, you'll know how to:- Create Remix Routes- Style Remix applications- Load data in Remix loaders- Mutate data with forms and actions
Vue3: Modern Frontend App Development
Vue.js London Live 2021Vue.js London Live 2021
169 min
Vue3: Modern Frontend App Development
Top Content
Workshop
Mikhail Kuznetsov
Mikhail Kuznetsov
The Vue3 has been released in mid-2020. Besides many improvements and optimizations, the main feature of Vue3 brings is the Composition API – a new way to write and reuse reactive code. Let's learn more about how to use Composition API efficiently.

Besides core Vue3 features we'll explain examples of how to use popular libraries with Vue3.

Table of contents:
- Introduction to Vue3
- Composition API
- Core libraries
- Vue3 ecosystem

Prerequisites:
IDE of choice (Inellij or VSC) installed
Nodejs + NPM