最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react中使用signal的項(xiàng)目實(shí)踐

 更新時(shí)間:2026年03月22日 11:11:58   作者:FanetheDivine  
本文主要介紹了react中使用signal的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

我參考solid的語(yǔ)法 完成了一個(gè)能在react里使用signal的npm包

曾經(jīng)考慮過使用vue或preact的獨(dú)立reactivity包 但考察過后發(fā)現(xiàn)不太符合需求 所以內(nèi)部實(shí)現(xiàn)都是自己完成的

API

提供了與solid很相似的api

  • createSignal 創(chuàng)建signal
const [count, setCount] = createSignal(0)
// 正常訪問signal
count()
// 不具有響應(yīng)性的訪問
count.value
  • createMemo 創(chuàng)建派生signal.同樣可以通過.value方式訪問值
  • defineComponent 定義組件.
type CompProps = {
  // 組件參數(shù)可以是signal
  num: () => number
}
const Comp = defineComponent<CompProps>((props) => {
  // props對(duì)象是signal 返回一個(gè)render函數(shù)
  // render中用到的signal被自動(dòng)收集 變化后更新組件
  return () => <span>{props().num()}</span>
})
  • createEffect 創(chuàng)建一個(gè)副作用 它會(huì)在useEffect階段被執(zhí)行 與組件渲染強(qiáng)相關(guān)
  • createRef 創(chuàng)建一個(gè)react ref 可以直接用在html屬性上
  • onCleanup 可以為組件 createMemo createEffect提供清理函數(shù)

說明

暫時(shí)不適配熱重載

使用例

import ReactDOM from 'react-dom/client'
import {
  defineComponent,
  createEffect,
  createMemo,
  createSignal,
  onCleanup,
  createRef,
} from '@fane_the_divine/react-signal'
const Page = defineComponent(() => {
  // 驗(yàn)證基本的響應(yīng)式能力
  const [count, setCount] = createSignal(0)
  const spanRef = createRef<HTMLSpanElement>()
  const double = createMemo(() => {
    console.log(spanRef.current)
    onCleanup(() => console.log('memo cleanup', count.value))
    return count() * 2
  })
  createEffect(
    (_, isFirst) => {
      console.log(`effect: isFirst:${isFirst} `, spanRef.current)
      onCleanup(() => console.log('cleanup in effect'))
    },
    [double],
  )
  const [show, setShow] = createSignal(true)
  return () => {
    console.log('render')
    return (
      <>
        <button
          onClick={() => {
            setCount(count() + 1)
            setCount(count() + 1)
          }}
        >
          {count()}
        </button>
        <span ref={spanRef}> {double()}</span>
        <button onClick={() => setShow(!show())}>{show() ? 'hidden' : 'show'}</button>
        {show() ? <SubComp1 value={count} /> : null}
      </>
    )
  }
})
const SubComp1 = defineComponent<{ value: () => number }>((props) => {
  // 驗(yàn)證組件銷毀后的cleanup被執(zhí)行
  createEffect(() => {
    onCleanup(() => console.log('SubComp1 unmount in effect'))
  })
  onCleanup(() => console.log('SubComp1 unmount'))
  return () => {
    console.log('%csub comp1 render', 'font-size: 28px; font-weight: bold; color: blue;')
    return <SubComp2 value={props().value} />
  }
})
const SubComp2 = defineComponent<{ value: () => number }>((props) => {
  // 驗(yàn)證signal跨層不重新渲染的能力
  return () => {
    console.log('%csub comp2 render', 'font-size: 28px; font-weight: bold; color: red;')
    return <button>sub comp2 {props().value()}</button>
  }
})
ReactDOM.createRoot(document.getElementById('root')!).render(<Page />)

到此這篇關(guān)于react中使用signal的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)react使用signal內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React星星評(píng)分組件的實(shí)現(xiàn)

    React星星評(píng)分組件的實(shí)現(xiàn)

    評(píng)分插件在購(gòu)物的應(yīng)用中經(jīng)??梢钥吹玫剑怯弥鴦e人的總是沒有自己寫的順手,本文就使用React實(shí)現(xiàn)星星評(píng)分組件,感興趣的可以了解一下
    2021-06-06
  • React實(shí)現(xiàn)歌詞滾動(dòng)效果(跟隨音樂播放時(shí)間滾動(dòng))

    React實(shí)現(xiàn)歌詞滾動(dòng)效果(跟隨音樂播放時(shí)間滾動(dòng))

    這篇文章主要為大家詳細(xì)介紹了React實(shí)現(xiàn)歌詞滾動(dòng)效果(跟隨音樂播放使勁按滾動(dòng)),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2024-02-02
  • 如何使用Redux Toolkit簡(jiǎn)化Redux

    如何使用Redux Toolkit簡(jiǎn)化Redux

    redux-toolkit是目前redux官方推薦的編寫redux邏輯的方法,針對(duì)redux的創(chuàng)建store繁瑣、樣板代碼太多、依賴外部庫(kù)等問題進(jìn)行了優(yōu)化,官方總結(jié)了四個(gè)特點(diǎn)是簡(jiǎn)易的/有想法的/強(qiáng)勁的/高效的,總結(jié)來看,就是更加的方便簡(jiǎn)單了
    2022-12-12
  • 基于React實(shí)現(xiàn)虛擬滾動(dòng)的方案詳解

    基于React實(shí)現(xiàn)虛擬滾動(dòng)的方案詳解

    這篇文章將以固定高度和非固定高度兩種場(chǎng)景展開React中虛擬滾動(dòng)的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • React中classnames庫(kù)使用示例

    React中classnames庫(kù)使用示例

    這篇文章主要為大家介紹了React中classnames庫(kù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • React如何實(shí)現(xiàn)像Vue一樣將css和js寫在同一文件

    React如何實(shí)現(xiàn)像Vue一樣將css和js寫在同一文件

    這篇文章主要介紹了React如何實(shí)現(xiàn)像Vue一樣將css和js寫在同一文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • React如何避免重渲染

    React如何避免重渲染

    這篇文章主要介紹了React如何避免重渲染,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • 詳解如何給React-Router添加路由頁(yè)面切換時(shí)的過渡動(dòng)畫

    詳解如何給React-Router添加路由頁(yè)面切換時(shí)的過渡動(dòng)畫

    這篇文章主要介紹了詳解如何給React-Router添加路由頁(yè)面切換時(shí)的過渡動(dòng)畫,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • 深入解析React?Hooks?閉包陷阱

    深入解析React?Hooks?閉包陷阱

    這篇文章主要為大家介紹了React Hooks閉包陷阱的深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • React懶加載實(shí)現(xiàn)原理深入分析

    React懶加載實(shí)現(xiàn)原理深入分析

    懶加載意思是不會(huì)預(yù)加載,而是需要使用某段代碼,某個(gè)組件或者某張圖片時(shí),才加載他們(延遲加載),這篇文章主要介紹了React懶加載實(shí)現(xiàn)原理
    2022-11-11

最新評(píng)論

青岛市| 杂多县| 大城县| 肃宁县| 湛江市| 资溪县| 确山县| 绥棱县| 黑龙江省| 石城县| 微博| 衢州市| 岳池县| 唐山市| 安阳市| 息烽县| 奉贤区| 金乡县| 定边县| 翁牛特旗| 徐汇区| 中江县| 凤山县| 高州市| 威信县| 平南县| 老河口市| 凤凰县| 遂宁市| 汉川市| 宁化县| 广丰县| 乌兰县| 和平县| 伽师县| 阿图什市| 日土县| 织金县| 双辽市| 兴宁市| 红原县|