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

react中使用signal的項目實踐

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

我參考solid的語法 完成了一個能在react里使用signal的npm包

曾經(jīng)考慮過使用vue或preact的獨立reactivity包 但考察過后發(fā)現(xiàn)不太符合需求 所以內(nèi)部實現(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對象是signal 返回一個render函數(shù)
  // render中用到的signal被自動收集 變化后更新組件
  return () => <span>{props().num()}</span>
})
  • createEffect 創(chuàng)建一個副作用 它會在useEffect階段被執(zhí)行 與組件渲染強相關(guān)
  • createRef 創(chuàng)建一個react ref 可以直接用在html屬性上
  • onCleanup 可以為組件 createMemo createEffect提供清理函數(shù)

說明

暫時不適配熱重載

使用例

import ReactDOM from 'react-dom/client'
import {
  defineComponent,
  createEffect,
  createMemo,
  createSignal,
  onCleanup,
  createRef,
} from '@fane_the_divine/react-signal'
const Page = defineComponent(() => {
  // 驗證基本的響應(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) => {
  // 驗證組件銷毀后的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) => {
  // 驗證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的項目實踐的文章就介紹到這了,更多相關(guān)react使用signal內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React星星評分組件的實現(xiàn)

    React星星評分組件的實現(xiàn)

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

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

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

    如何使用Redux Toolkit簡化Redux

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

    基于React實現(xiàn)虛擬滾動的方案詳解

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

    React中classnames庫使用示例

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

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

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

    React如何避免重渲染

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

    詳解如何給React-Router添加路由頁面切換時的過渡動畫

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

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

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

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

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

最新評論

长宁县| 石城县| 潮安县| 中西区| 上犹县| 潢川县| 浙江省| 砀山县| 遂昌县| 沭阳县| 普兰店市| 梁山县| 罗平县| 邳州市| 徐州市| 黄浦区| 五原县| 印江| 伊川县| 汶上县| 饶阳县| 乐东| 加查县| 南宁市| 永嘉县| 黄骅市| 辽宁省| 喀什市| 宜城市| 方山县| 梁平县| 宣城市| 工布江达县| 荔波县| 嵊州市| 江川县| 讷河市| 陆丰市| 广昌县| 探索| 福安市|