import { useState } from 'react'
class Signal<T> {
#value: T
#dispatchers: Set<React.Dispatch<React.SetStateAction<T>>> = new Set()
constructor(value: T){
this.#value = value
}
get current(): T {
return this.#value
}
set current(value: T){
if(this.#value !== value){
this.#value = value
for(const dispatcher of this.#dispatchers){
dispatcher(this.#value)
}
}
}
subscribe(dispatcher: React.Dispatch<React.SetStateAction<T>>): void {
if(!(this.#dispatchers.has(dispatcher))){
this.#dispatchers.add(dispatcher)
}
}
}
const createSignal = <T>(value: T): Signal<T> => new Signal(value)
const useSignal = <T>(signal: Signal<T>): Signal<T> => {
const [, dispatcher] = useState(signal.current)
signal.subscribe(dispatcher)
return signal
}
export { createSignal, useSignal }
import { createSignal } from '../lib/signals.ts'
export const counter = createSignal(0)
import { useSignal } from '../lib/signals.ts'
import { counter } from './shared_signals.ts'
export const Button = () => {
const _counter = useSignal(counter)
return (
<button onClick={ () => ++_counter.current }>
Count is { _counter.current }
</button>
)
}
import { hydrateRoot } from 'react-dom/client'
import { Layout } from './Layout.tsx'
import { Button } from './Button.tsx'
hydrateRoot(
document,
<Layout>
<Button/>
<Button/>
<Button/>
<Button/>
<Button/>
<Button/>
<Button/>
<Button/>
<Button/>
<Button/>
</Layout>
)
DisplayPort Max Refresh Rates (SDR)
3840x2160 @ 60Hz , 3440x1440 @ 144Hz , 2560x1440 @ 180Hz , 1920x1080 @ 240Hz
Почему нативные модули не так просто скомпилировать под любой контроллер?
В нативных модулях добавлены куски из других языков или как это происходит?
И как в npm понять, какие модули ванильные, а какие нативные?
Т.е. операции по типу [[...arr], value] так же сработают по скорости и логике, как arr.push(value)?Про скорость ответили, скажу про логику: она у этих операций разная. В первом случае создаётся новый массив, во втором изменяется существующий. Это важно, если важна иммутабельность, как, например, в Реакте.
Т.е. операции по типу [[...arr], value] так же сработают по скорости и логике, как arr.push(value)?
v-model.lazy
.