[React] Write a generic React Suspense Resource factory

Using Suspense within our component isn't exactly ergonomic. Let's put all that logic into a reusable function so we can create resources anytime we need them and for any asynchronous interaction in our app.

 

In previous post, https://www.cnblogs.com/Answer1215/p/12006526.html, we have see how to use React.Suspense to handle data fetching, with fallback and ErrorBoundary. 

In this post, we will refactor code to make a generic function to handle all use cases.

复制代码
function createFetch(fetchFn) {
  let status = 'pending'
  let result
  let error
  let promise = fetchFn().then(
    p => {
      console.log('promise resolve')
      status = 'success'
      result = p
    },
    e => {
      status = 'error'
      error = e
    },
  )

  return {
    read() {
      if (status === 'error') {
        throw error
      }

      if (status === 'pending') {
        throw promise // this API might change
      }

      if (status === 'success') {
        return result
      }
    },
  }
}
复制代码

 

Use:

复制代码
const promise = createFetch(() => fetchPokemon('pikachu'))

function PokemonInfo() {
  console.log('PokemonInfo init')

  const pokemon = promise.read()

  return (
    <div>
      <div className="pokemon-info__img-wrapper">
        <img src={pokemon.image} alt={pokemon.name} />
      </div>
      <PokemonDataView pokemon={pokemon} />
    </div>
  )
}
复制代码

 

posted @   Zhentiw  阅读(198)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2017-12-08 [React] Controlling Form Values with React
2016-12-08 [Vue] Preload Data using Promises with Vue.js and Nuxt.js
点击右上角即可分享
微信分享提示