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.
Weekly Vue News #141 Share Styling Using Wrapper Components View online Hi 👋 I got the opportunity to raffle 3 in-person tickets for the first edition of the C3 Dev Festival in Amsterdam. You can participate here. Have a nice week ☀️ Vue 📕 Effortless Forms w/ FormKit 👉🏻 This article on FormKit teaches you how to build forms effortlessly, with a focus on great UX. 📕 Vue Tip: Best Practices for Working with Slots 👉🏻 When developing with slots in Vue.js, it's important to follow some best practices to ensure clean and maintainable code. 📹 This is the Future of Vue 👉🏻 Matt took a look at what exactly makes Vue Vapor so exciting. 📹 Should You Use Vue Slots Over Props? 👉🏻 John talks about the pros & cons of using Vue slots instead of props. 🛠️ Pinia Colada 👉🏻 An opinionated yet flexible data fetching layer on top of Pinia. 👉🏻 It's still experimental and not ready for production. 🛠️ vue-tel-input 👉🏻 International Telephone Input with Vue. 🔥 Vue Tip: Share S...
Tuesday, October 8, 2024 Podcast : I was able to write a post that appeared on Mastodon using ActivityPub. Via the WordPress API. Congrats to the ActivtyPub community, Automattic and Mastodon. "It just worked." # Okay this is blowing my mind. My friends at Automattic showed me how to turn on ActivityPub on a WordPress site. I wrote a test post in my simple WordPress editor, forgetting that it would be cross-posted to Mastodon. When I just checked in on Masto, there was the freaking post . After I recovered from passing out, I wondered what happens if I update the post in my editor, and save it to the WordPress site that's hooked up to Masto via ActivityPub. So I made a change and saved it. I waited and waited, nothing happened. I got ready to add a comment saying ahh I guess it doesn't update, when -- it updated. Oh geez look at that. Folks, I did nothing here but write an app that can be used to edit WordPress posts. And I got in return an app that...
Tuesday, August 20, 2024 My linkblog, which posts to the Links tab on Scripting News, as well as Bluesky , Mastodon and RSS , now also posts to Twitter and Threads . # Today would have been my mother's 92nd birthday. She died in 2018, and I still haven't, deep inside, fully gotten the message that she's gone. Probably the most significant person in my life. I find most of my adult relationships can be traced back to my relationship with her. # Ignore the NY Times # When President Biden took the stage last night at the DNC, I had a moment of buyer's remorse. He looked so good in his black suit, and the pictures of the new candidates, and their spouses, looked comical in comparison to the president who was about to speak. # Why did Walz have a permanent frown on his face. I find his presence next to Harris is almost always awkward. He's taller, and moves a lot. I noticed this with Sanders when he was debating Clinton in 2016. Sh...
评论
发表评论