This week is the Vue.js Nation Conference (January 29-30), and it's free to register — don't miss out! 🎉
On my end, I've migrated both mokkapps.de and weekly-vue.news to Nuxt Content v3 and Nuxt UI Pro v3. Next up, I'll be continuing work on my Nuxt Starter Kit. Lots of exciting things ahead — stay tuned!
👉🏻 A new suite of open source UI components for Svelte, React, and Vue.
💡 Vue Tip: Use effectScope for Managing and Cleaning Up Reactive Effects
Vue provides the effectScope effectScope API to group and cleanup multiple reactive effects.
An EffectScope EffectScope instance can automatically collect effects run within a synchronous function so that these effects can be disposed together at a later time.
Let's take a look at a simple example:
1// effect, computed, watch, watchEffect created inside the scope will be collected23const scope = effectScope()45scope.run(() => {6 const doubled = computed(() => counter.value * 2)78 watch(doubled, () => console.log(doubled.value))910 watchEffect(() => console.log('Count: ', doubled.value))11})1213// Dispose of all effects in the scope14scope.stop()15
A practical application is the createSharedComposable createSharedComposable function in VueUse:
1import type { EffectScope } from 'vue'2import type { AnyFn } from '../utils'3import { effectScope } from 'vue'4import { tryOnScopeDispose } from '../tryOnScopeDispose'56/**7 * Make a composable function usable with multiple Vue instances.8 *9 * @see https://vueuse.org/createSharedComposable10 */11export function createSharedComposable<Fn extends AnyFn>(composable: Fn): Fn {12 let subscribers = 013 let state: ReturnType<Fn> | undefined14 let scope: EffectScope | undefined1516 const dispose = () => {17 subscribers -= 118 if (scope && subscribers <= 0) {19 scope.stop()20 state = undefined21 scope = undefined22 }23 }2425 return <Fn>((...args) => {26 subscribers += 127 if (!scope) {28 scope = effectScope(true)29 state = scope.run(() => composable(...args))30 }31 tryOnScopeDispose(dispose)32 return state33 })34}
This function creates a shared composable that efficiently manages side effects across multiple components. For example, using a useMouse useMouse hook, you can prevent multiple event listeners from being added:
1function useMouse() {2 const x = ref(0)3 const y = ref(0)45 function handler(e) {6 x.value = e.x7 y.value = e.y8 }910 window.addEventListener('mousemove', handler)1112 onUnmounted(() => {13 window.removeEventListener('mousemove', handler)14 })1516 return { x, y }17}1819const useSharedMouse = createSharedComposable(useMouse)
effectScope effectScope allows developers to manage reactive effects more efficiently and clearly. By leveraging this powerful feature, you can ensure your applications are not only more performant but also easier to maintain.
👉🏻 In this tutorial, you'll build a simple Nuxt application with Deno that will display a list of dinosaurs and allow you to learn more about each one when you click on the name.
👉🏻 Alexander Lichter is joined by Daniel Roe, full-time open source developer and lead of the Nuxt team to go through some notable events of 2024 in the Vue and Nuxt ecosystem.
👉🏻 Tailwind CSS v4.0 is a major release that focuses on performance improvements, with up to 5x faster full builds and over 100x faster incremental builds.
How's it going? I was planning to release the update for Reusable Components yesterday, but things haven't gone as planned. Instead, I will be launching it next week. I need a just a bit more time to make sure that the quality is up to my standards. As I've been updating the course and re-writing all the content and step-by-step refactorings, I've also been able to simplify a few things. It's just like refactoring a piece of code, and it's one of the greatest feelings. I also looked at how much content is in there, and it looks like it will be similar to the Clean Components Toolkit. Lots of great content on how to write highly reusable components, simplified and updated — I can't wait to release the update next week! Oh, and one more thing: I'm doing a podcast with Alex Lichter ! It's called Deja Vue and we'll be releasing the first ...
Sunday, July 28, 2024 Before Twitter broke the API, it was a quick way for me to channel items from my blog to almost all the people who follow me on the social web. Now it isn't even one of the services I use that I can post to with my writing tool (those are Bluesky, Mastodon, WordPress). None of them are anything like the aggregator of people that Twitter was, and I can't even reach it from my writing tool. I really want to solve this problem, but I absolutely can't do this on my own. No time, patience, and it's not my job to do all that coding. As observed the other day, my time should be spent on writing tools for the web and directly related products. This is the kind of project that should be handled as an open source thing. # When technology moves backwards # I don't when technology moves backwards. # I'm always trying to push it the other way. # It's like being a ball player wanting to win a game. # Or a musi...
评论
发表评论