Svelte中保证组件重渲染的条件是什么?是否与React机制一致?
Svelte的响应式更新逻辑和React不一样
Svelte的响应式机制是编译时实现的,和React的运行时重渲染逻辑完全不同,不需要依赖特定的状态API才能触发更新:
组件内部用
let声明的普通变量,只要发生变化,Svelte会自动更新页面上用到该变量的部分,根本不需要像React那样必须用state或者context。
比如这个简单的组件:<script> let count = 0; function addOne() { count += 1; // count变化后,页面的{count}会自动更新 } </script> <button on:click={addOne}>点击了{count}次</button>这里的
count就是个普通局部变量,但它的修改会直接触发对应DOM的更新——因为Svelte在编译阶段就已经追踪了这个变量的所有使用位置,变量一变就精准更新,不会像React那样重新渲染整个组件。Store的作用是跨组件共享状态,不是组件内部更新的必需项:
- 如果只是单个组件内部使用变量,完全不需要Store,直接用
let就行。 - 只有当你需要在多个组件之间共享状态时,才需要用Svelte的Store(比如
writable、readable这类),此时通过$前缀订阅Store的值,Svelte会自动追踪并更新用到这些值的组件。
- 如果只是单个组件内部使用变量,完全不需要Store,直接用
简单说:Svelte不需要靠Store保证单个组件的更新,组件内普通变量变化就会触发更新;Store只是跨组件共享状态的工具。
内容的提问来源于stack exchange,提问作者Nir O.
相关产品推荐
相关产品推荐

