首页 > 其他分享 >实时字幕/Suspense/ref的妙用/MutationObserver

实时字幕/Suspense/ref的妙用/MutationObserver

时间:2024-06-21 17:10:42浏览次数:13  
标签:el const ref MutationObserver Suspense true 节点

chrome 设置 搜索“实时字幕

Suspense的 Promise由并行改为了串行
https://sorrycc.com/react-19-rc-suspense/
解法:
提前准备好数据,在 Render 时仅需要消费那个 Promise

export const Route = createFileRoute('/')({
  loader: ({ context: { queryClient } }) => {
    queryClient.ensureQueryData(repoOptions('tanstack/query'))
    queryClient.ensureQueryData(repoOptions('tanstack/table'))
  },
  component: () => (
    <Suspense fallback={<p>...</p>}>
      <RepoData name="tanstack/query" />
      <RepoData name="tanstack/table" />
    </Suspense>
  ),
})

ref的妙用

https://github1s.com/timolins/react-hot-toast/blob/main/src/components/toaster.tsx#L15-L45
const ToastWrapper = ({
  id,
  className,
  style,
  onHeightUpdate,
  children,
}: ToastWrapperProps) => {
  const ref = React.useCallback(
    (el: HTMLElement | null) => {
      if (el) {
        const updateHeight = () => {
          const height = el.getBoundingClientRect().height;
          onHeightUpdate(id, height);
        };
        updateHeight();
        new MutationObserver(updateHeight).observe(el, {
          subtree: true,
          childList: true,
          characterData: true,
        });
      }
    },
    [id, onHeightUpdate]
  );

  return (
    <div ref={ref} className={className} style={style}>
      {children}
    </div>
  );
};

MutationObserver
目标节点及其整个子树(subtree: true):任何后代节点的变化也会被捕捉。
子节点的添加或删除(childList: true):如果有新的子节点被添加到目标节点或有子节点被移除,观察者会捕捉到。
字符数据的变化(characterData: true):如果目标节点或其子节点的文本内容发生变化,观察者也会捕捉到。

标签:el,const,ref,MutationObserver,Suspense,true,节点
From: https://www.cnblogs.com/beilo/p/18260933

相关文章

  • Reflective Journal Final
    Inthefirstclass,Itouchedthisentirelynewconcept.Actually,Ididn'tknowwhatisdigitalmultimodalcomposingexactlyatfirst.Butafterseveralclasses,Igraduallyunderstoodthedigitalmultimodalcomposingisanewstyleofwriting.Ith......
  • SpringBoot 项目启动后监听器执行操作:ContextRefreshEvent
    一Springboot运行时,会依次发送以下事件1. ApplicationStartingEvent 2. ApplicationEnvironmentPreparedEvent:当Environment已经准备好,在context创建前3. ApplicationContextInitializedEvent:在ApplicationContext创建和ApplicationContextInitializer都被调用后,但是......
  • 【论文笔记】Prefix-Tuning: Optimizing Continuous Prompts for Generation
    题目:Prefix-Tuning:OptimizingContinuousPromptsforGeneration来源:ACL2021模型名称:Prefix-Tuning论文链接:https://aclanthology.org/2021.acl-long.353/项目链接:https://github.com/XiangLi1999/PrefixTuning感觉与prompt的想法很相近,那么问题来了,为什......
  • 解决页面刷新后firefox浏览器中iframe内容不更新的问题
    最近遇到了一个问题:使用firefox浏览切换2层iframe下的某个页面后iframe内容未更新,Chrome和Edge浏览器并无这个问题。在这个项目中,最外层的iframe用于隐藏url,里层的iframe用于给不同参数的url提供一个统一地址以便于权限路由等控制。 由于项目比较复杂,用简单的代码很难去复现这个......
  • BaseHref 以及前端路由的问题
    BaseHref以及前端路由的问题BaseHref是什么?MDN,说的直白一点就是,这个站点里面所有的访问主站的资源文件,都会在路由前面加上这个basehref,包括*js,scss,image,ajax,......**。如果一个DOM里面有多个这样的base,只有第一个会起作用。BaseHref在Angular工程的编译中有......
  • Reflective Journal Final
    Firstofall,Iwouldliketothankmyteachers,LiuFulanandZhouMengchen,fortheirguidancethroughoutthesemester.Iamalsoverygratefultotheteachersforgivingmethisopportunitytolearndigitalmultimodalwritingsystematically.AlthoughI......
  • 防抖ref如何在vue中被定义
    本文由ChatMoney团队出品为什么ref要实现防抖在vue的开发过程中,我们通常会使用到ref,但在我们需要对一个频繁的赋值操作做防抖操作时,我们通常只能通过编写一个独立的防抖函数来实现,这样相对会多一些步骤(麻烦一些)。例如我们给一个即时搜索框的input实现防抖输入(即在输入文本n秒......
  • 在vue中定义一个防抖ref
    本文由ChatMoney团队出品为什么ref要实现防抖在vue的开发过程中,我们通常会使用到ref,但在我们需要对一个频繁的赋值操作做防抖操作时,我们通常只能通过编写一个独立的防抖函数来实现,这样相对会多一些步骤(麻烦一些)。例如我们给一个即时搜索框的input实现防抖输入(即在输入文本n秒......
  • PhantomReference 和 WeakReference 究竟有何不同
    本文基于OpenJDK17进行讨论,垃圾回收器为ZGC。提示:为了方便大家索引,特将在上篇文章《以ZGC为例,谈一谈JVM是如何实现Reference语义的》中讨论的众多主题独立出来。PhantomReference和WeakReference如果仅仅从概念上来说其实很难区别出他们之间究竟有何不同,比如,......
  • vue3标签模板上的ref类型注解
    子组件<scriptsetuplang="ts">import{ref,defineExpose}from'vue';constnum=ref<number>(10)defineExpose({num,//把值暴露出去,父级可以通过ref获取})</script><template><h1>我是组件</h1></template&g......