-
Notifications
You must be signed in to change notification settings - Fork 144
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
配合antd 的Button使用,Button会自动出现Loading状态 #225
Comments
这个问题确实挺离奇的,我看看 |
不仅仅是Button。 |
React 版本降到 17 就好了 |
同样的问题,有一部分状态没有缓存 |
跟进到可能与 ReactDOMClient.createRoot 有关,换成传统的 ReactDOM.render 问题就消失了 具体表现为,useLayoutEffect 在 createRoot 下,会随着组件重新激活而执行多次,比较怪异,render 下没有这个问题 |
react 官方目前记录了类似的问题 |
最终确认是 react-freeze 库与 已经给 react-freeze 提了 issue,但不确定这块有方式解决 目前的解决方案:
相关问题重现 |
react-activation 发布了 0.12.2 支持通过 |
我目前的解决方案是关闭antd组件的动画过渡效果,这个api在antd官方文档上并没有提及,但实际上是可以透传给底层rc组件生效的。 |
这个有具体文档么 |
react 18最大的更新就是concurrent,用ReactDOM.render就退回legacy了,那18的意义就没了。所以,如果你的项目用了react 18还是建议使用ReactDOMClient.createRoot的,可以用这种方式避免出现loading: // 给icon传空的Fragment,这里loading不要传true,可以不传,或者传false,具体可以看iconNode
<Button icon={<></>}><Button> 如果不给icon传值的话,antd就会使用默认的LoadingIcon,具体可以看iconNode,LoadingIcon存在就会去执行CSSMotion,Motion这个库好久没更新,没往下追了。所以,传空的fragment覆盖掉默认的LoadingIcon,就不会执行CSSMotion里面的逻辑,自然也就没有loading了。 至于@CJY0208给的例子,react-freeze用了Suspense,在react18和react17中Suspense有不同的行为,在react 18中Suspense的resolve是会触发useLayoutEffect的,严格来说应该是更符合直觉上的lifecycle了。具体可以看reactwg/react-18#7 |
发现新问题,如果用createRoot 这个方法发现,pro-table组建加载会导致路由缓慢,卡顿,还是感觉用autoFreeze好点 |
使用 autoFreeze={false} , 页面第一次切换不会缓存,第二次才会缓存。 又试了一下,A页面的组件状态缓存了(比如输入框输的值), 但是 useEffEct 第一次还是会触发。 |
在线地址:https://codesandbox.io/p/github/waterJLuck/antd-activation/draft/lucid-tdd?import=true&file=%2Fsrc%2Fview%2Fpage1.tsx
复现方法: 点击增加按钮 一秒后再点击去page2按钮
The text was updated successfully, but these errors were encountered: