Skip to content

🔥 (#72) The CSS Unselector

August 2022

天哪,虽然已经持续发布了 71 周的周刊,我今天差点忘了!

新周刊发了,虽迟但到!

这是本周的 tips 内容!

— Michael

🔥 The CSS Unselector

提起 CSS 我们通常讨论的是如何通过选择器来选择具体元素。

要确保选对了元素,这很难。

我的博客使用了 Vue Router 提供的 .router-link-active 来让链接当前的页面。我会改变当前链接的颜色,让用户知道浏览位置。

我想确保页面里的链接不会使用同样的方式突出展示。

例如,一篇文章开头的目录应该有正常外观的链接,而不是改变颜色。

为了做到这一点,我需要避免选择所有在 href 属性中带有 # 的链接。

.router-link-active: not([href * = "#" ]);

我正在使用一个 :not 查询,但在其中使用一个属性选择器。

我的实际代码甚至更有趣,因为还有一些其他的事情需要我考虑。

.nav-link.router-link-exact-active:not(.site-title):not([href*='#'])

🔥 动态返回值

组合代码可以返回单个值或者对象。通常,使用 ref 包裹。

但我们可以根据需要动态切换:

// 返回单个值
const now = useNow();

// 更精细控制
const { now, pause, resume } = useNow({ controls: true });

这很棒,因为大多数情况我们只需要一个值。什么情况下会变得复杂呢?

通过动态提供 ref 对象值,可以让我们更高级地使用他们,即便他们很少被使用。

内部可能这样实现:

export default useNow(opts) {
  const {
    controls = false,
	} = opts;

	// Do some things in your composable

  if (controls) {
    return { now, pause, resume };
  } else {
    return now;
  }
}

📜 失效的计算属性 Computed

你有没有遇到要强制更新计算属性的情况?有没有想过为啥会遇到这种情况?

在这篇文章里,Abdelrahman 展示了一种非常聪明的方法,来解决这个问题。

进一步阅读:Invalidating Computed with the Composition API

💬 理论和实践

“理论是你知道一些东西,但不会使用。实践是你知道某些东西起作用,但不知道为什么。程序员们会统一理论和实践:程序跑不起来,也不知道为什么” —Unknown

🧠 间隔重复:为什么必须有一个真相的来源

想要长时间牢牢记住某些事情,最好方式就是定期回顾,逐渐增加回顾的间隔 👨‍🔬

实际上,记住这些 tips 比发呆有用得多,这是几周前的一个 tip 可以唤起你的记忆。

这是我理解的状态管理关键原则:

Each piece of state has a single owner, a single source of truth.

每个部分的状态是独立的、单一的信息来源

不允许在其他地方修改状态,智能是临时调取引用。

如果 Vuex 存储了一个数组,那只能在 Vuex 里存储和更新。应用中如果要使用这个值,必须从 store 里读取,直接读取或者通过其他组件读取。

如果这个状态是某个组件独有,只有这个组件可以修改它。这意味着其他组件比如通过 emit 事件来进行操作更新。

为什么?

如果你允许在任意位置修改,代码会一团糟。

通过单一的状态来源,你可以轻松理解发生了什么。

最好的代码是易读易懂的。

p.s. I also have two courses: Reusable Components and Clean Components

来源

原文 https://michaelnthiessen.com/weekly-072-august-03/

本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。