Skip to content

Instantly share code, notes, and snippets.

View sergeysova's full-sized avatar
👋
Open to network

Sova sergeysova

👋
Open to network
View GitHub Profile
@zerobias
zerobias / Dynamic spawn in effector.md
Last active April 12, 2024 10:14
Dynamic spawn in effector

Привет! Хочу описать ситуацию с моделями и динамическим спавном: хочется сделать это в ближайшее время. Мы в комитете эффектора рассмотрели ряд апи, все по своему интересны, но в целом не были учтены три главные проблемы, хочу их озвучить для вас, может вам придет что-то на ум)

Спавн моделей будет работать примерно как вызов fork для каждого инстанса. Тело фабрики при этом вызывается один раз, то есть юниты не пересоздаются, все как мы привыкли. Разница в том, что статические фабрики можно спавнить радикально эффективнее, разница как с первой версией fork с линейной сложностью и текущей которую в принципе малореально увидеть на мониторинге приложения.

Итак, проблемы которые нужно решить проектируя апи:

Первая проблема

Как пробрасывать аргументы в фабрику, которая вызывается один раз?

Нужно так или иначе сделать все аргументы сторами и возникает вопрос как сделать это удобнее всего?

test('stuff', async () => {
// форкаем домен, создаем новый независимый скоуп
const scope = fork(root, {
// в конфиге форка будут модификации, которые применятся к скоупу
values: new Map()
.set($myStore, value), // подменили стартовое значение стора эксклюзивно для этого скоупа
handlers: new Map()
.set(myFx, mockHandler) // подменили хэндлер эффекта эксклюзивно для этого скоупа
});
import { Effect, Event, sample, Store, Unit } from "effector"
declare let unit: Unit<number>
declare let store: Store<number>
declare let event: Event<number>
declare let effect: Effect<number, number>
store = sample(store)
store = sample(store, store)
event = sample(store, event)
@XaveScor
XaveScor / react-fails.md
Last active April 15, 2021 20:36
Неочевидности реакта

Хуки и componentWillUnmount

С первого взгляда аналог componentWillUnmount очень прост:

function useWrongUnmount(f) {
  useEffect(() => () => f(), [])
}

Если вы гляните на всякие react-awesome, то увидите, что всякие библиотеки хуков используют именно эту имплементацию:

@zerobias
zerobias / h.ts
Last active April 18, 2022 08:23
Declarative stack-based DOM api
import {
createStore,
createEvent,
is,
clearNode,
forward,
sample,
Store,
Event,
launch
@zerobias
zerobias / proposal_tasks.md
Last active July 18, 2019 22:07
effector proposal: tasks

Tasks

try it

Current effect behavior

const fx = createEffect({
  handler(params) {
    console.log(params)
  },
.button {
border: 1px solid #555;
text-align: center;
padding: 0 12px;
color: #ddd;
cursor: pointer;
}
.button:hover {
background: rgba(255, 255, 255, .25)
import React, { useLayoutEffect, useRef } from 'react'
import { useStore } from 'effector-react'
import * as effector from 'effector'
import { pathOr } from 'ramda'
const trackCreateStore = effector.createEvent('trackCreateStore')
const trackCreateEvent = effector.createEvent('trackCreateEvent')
const trackCreateEffect = effector.createEvent('trackCreateEffect')
const trackCreateStoreObject = effector.createEvent('trackCreateStoreObject')

restore

https://effector.now.sh/en/api/effector/restore

Используется тогда, когда необходимо из ивента напрямую выставить значение в стор в обход .on.

Аналог без restore:

const $store = createStore('');
const event = createEvent();
$store.on(event, (_, payload) => payload);