Skip to content
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

为什么transform的返回会被缓存 #638

Open
MeetinaXD opened this issue Feb 18, 2025 · 2 comments
Open

为什么transform的返回会被缓存 #638

MeetinaXD opened this issue Feb 18, 2025 · 2 comments
Labels
bug:confirmed Something isn't working React Issues or pull request for React

Comments

@MeetinaXD
Copy link
Contributor

Discussed in https://github.com/orgs/alovajs/discussions/636

Originally posted by TSjianjiao February 12, 2025
比如如下场景:

  1. 有一个字典接口,返回一个字典数组,数据格式为data。将它设置为永久缓存。
  2. 组件A请求这个字典,组件需要数据格式为dataA
  3. 切换到组件B,组件需要数据格式为dataB

问题是上一个组件transform之后,导致下一个组件命中缓存时,获取到的数据不是原始数据格式。

比如:

  1. 先进入组件A,此时转化路径是data -> dataA,并缓存
  2. 再进入B,如果命中缓存转化路径是是dataA -> dataB,没有命中缓存则是data -> dataB

可以看到B组件需要对两种情况进行区分,而且不熟悉的甚至不知道为什么数据格式会变成dataA而不是data

所以为什么不取消缓存transform的结果,命中缓存返回的永远都是原始数据格式data

@MeetinaXD MeetinaXD added bug:confirmed Something isn't working React Issues or pull request for React labels Feb 18, 2025
@MeetinaXD
Copy link
Contributor Author

@JOU-amjs 这个问题复现了的确是 issue 描述的原因。我觉得把 transform 放在 getCache 后进行可以解决,但一些情况下可能会造成 cache 变大的问题。你觉得怎么样?

@JOU-amjs
Copy link
Contributor

JOU-amjs commented Feb 19, 2025

@TSjianjiao transform是用于统一转换某个接口数据的,如果需要针对一个接口不同地方不同转换数据的话,建议可以在hook的middleware中转换

关于缓存transform之后的数据,这其实是有意为之的,如果缓存transform之前的数据,当使用fetch并且没有设置全局responded时,将会缓存一个Response对象,如果某个请求设置了持久化缓存,Response就会因无法持久化而失效。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug:confirmed Something isn't working React Issues or pull request for React
Projects
None yet
Development

No branches or pull requests

2 participants