sync-query
Version:
Use the React higher-order component to store the React State in URL query (routing parameters)
27 lines (14 loc) • 1.18 kB
Markdown
# 何时开始监听
- 实际遇到的问题是:首次操作,突然又发起请求,刷新界面
在第一个 fetch,就注入 __SYNC_QUERY_DIFF_IGNORE__,会出现在 state(init),fetch后得到的 state(fetchedFirst),没有同步给 sync-query,这样任何触发 setState 的操作,比较的都是 state(init) 和 state(fetchedFirst),都会再次触发 fetch
- 解决方案
在 componentDidMount 内代码执行后,再给 fetch 注入 __SYNC_QUERY_DIFF_IGNORE__。
通常来说在 componentDidMount,开发者会手动 fetch,这个 fetch 是没有 __SYNC_QUERY_DIFF_IGNORE__的,所以 fetch 里面的 setState,仍能同步给 sync-query。
- 但是这里会遇到新的问题
连续触发 2 次fetch
fetch (__SYNC_QUERY_DIFF_IGNORE__ ×) => 同步给 sync-query, 同时触发 state diff => 再次触发 fetch (__SYNC_QUERY_DIFF_IGNORE__ √) => 停止
- 解决方案
增加一个标志位 __SYNC_QUERY_CALLBACK_IGNORE__
fetch (__SYNC_QUERY_CALLBACK_IGNORE__) => 同步给 sync-query, 同时触发 state diff => 不触发 fetch => 停止
# 基本实现原理
setState => componentDidUpdate => state diff => 触发 fetch