ice-lab / ice-next

The repo was transferred to https://github.com/alibaba/ice
https://v3.ice.work/
MIT License
53 stars 7 forks source link

路由切换导致全局 Provider 重新渲染 #607

Closed ClarkXia closed 2 years ago

ClarkXia commented 2 years ago

目前 ice.js 应用最外面的组件是 <BrowserEntry />,它主要负责是事情是监听路由变化,加载下一页资源后,通过 setState 的方式更新 location 对象,进而改变当前渲染的路由组件。

https://github.com/ice-lab/ice-next/blob/c0981492095af1b41441acc4d17923850195e028/packages/runtime/src/runClientApp.tsx#L195

对于全局 Provider 组件来说,它们是 <BrowserEntry /> 的子组件,每当路由改变,必定会触发它重新渲染(children 会改变),导致一些初始化数据的逻辑会重新执行(比如 auth 和 store)

image

从正常的逻辑来看,全局 Provider 应该只能在应用初始化的时候只渲染一次,应该是 <BrowserEntry /> 的父组件。

chenjun1011 commented 2 years ago

auth 和 store 这些初始化数据的逻辑 是不会依赖 location 信息的?切换路由 也不需要监听?

ClarkXia commented 2 years ago

中间有一层 Anonymous 可以一并处理掉

luhc228 commented 2 years ago

auth 和 store 这些初始化数据的逻辑 是不会依赖 location 信息的?切换路由 也不需要监听?

不需要