Size: a a a

2021 June 26

АД

Алексей Данчин... in ☄️ effector
useStore не принимает Scope. А как тогда продублировать юниты для нескольких компонентов в React?
источник

c⁣

createStore<🦉>... in ☄️ effector
Распиши задачу плиз
источник

АД

Алексей Данчин... in ☄️ effector
На примере счетчика.
https://share.effector.dev/hjvc67up

Так как createStore создает одно хранилище, а useStore лишь подписывает на событие, то оба компонента CounterSegment дублируются. А если нужно чтобы не дублировалось? Я пробовал через fork, но useStore ругается на Scope, говорит, что не подходит.
источник

АД

Алексей Данчин... in ☄️ effector
Думал сделать что-нибудь в духе
https://share.effector.dev/uden9dy4
источник

АХ

Александр Хороших... in ☄️ effector
Такое нужно делать примерно так:
источник

АХ

Александр Хороших... in ☄️ effector
Переслано от 🚀🔬 🚀🔬🚀🔬...
немного поправил пример от Vetro, рекомендую делать так. все юниты виджета находятся в корне, не пересоздаются каждый раз, а сам виджет пишется как обычный ssr компонент

https://codesandbox.io/s/festive-knuth-2htt0?file=/src/node-modules/my-widget.tsx

при этом есть два ограничения:

1) полный запрет на императивные вызовы эвентов внутри ватчей/эффектов; видя эту задачу я уже представляю, как могу это решить, но пока так
2) любые связи виджета с внешним миром обязаны формироваться после форка для каждого конкретного инстанса отдельно (пример — в функции createWidget). это связано с тем, что тут нам необходимо предотвратить клонирование внешних сущностей, а форк при работе обходит все связи какие найдёт
источник

АХ

Александр Хороших... in ☄️ effector
Переслано от 🚀🔬 🚀🔬🚀🔬...
источник

АХ

Александр Хороших... in ☄️ effector
Переслано от 🚀🔬 🚀🔬🚀🔬...
источник

АХ

Александр Хороших... in ☄️ effector
Но пример выше - не то чтобы частый случай использования эффектора и вообще - эффектор это не замена локальному стейту реакта, так что лучше бы подробностей к задаче накидать, да
источник

АД

Алексей Данчин... in ☄️ effector
Сложно как-то. Пример по сложнее в том, что сложную структуру нужно редактировать сразу в двух экземплярах, которые располагаются на одном экране. Данные в виде объектов спускаются в каждый редактор родительским компонентом, но внутри, раньше, каждый из компонентов работал со своей версией через useReducer. В принципе все было прозрачно. С effectorom такое же сделать, да еще и чтобы было прозрачно, не получается пока.
источник

АХ

Александр Хороших... in ☄️ effector
А что потом с каждым экземпляром происходит? 🤔
источник

D

Dmitry in ☄️ effector
В фабрику и 2 вызова. Вот и параллельно сделал
источник

АД

Алексей Данчин... in ☄️ effector
Да, походу так и сделаю. Через хуки.
источник

АД

Алексей Данчин... in ☄️ effector
Редактирование копий.
источник

АХ

Александр Хороших... in ☄️ effector
Ну, что-то типа 🤷‍♂️
https://share.effector.dev/j5Tpm2G0

общая идея, надеюсь, понятна
источник

АД

Алексей Данчин... in ☄️ effector
Мне кажется если доработать fork так чтобы useStore(fork(scope)) работало, то было бы супер
источник

D

Dmitry in ☄️ effector
Я так кстати делал параллельные экраны в приложении
источник

D

Dmitry in ☄️ effector
Но думаю ему подойдёт
const editor = create()
const editor1 = create()
источник

АХ

Александр Хороших... in ☄️ effector
форк вообще про другое
источник

К

Кирилл in ☄️ effector
ребят, не могу понять почему у меня split просит boolean, что не так вот с этим кодом?


const one = createEvent<number>();
const two = createEvent<null>();

const $source = createStore<number|null>(null)

split({
 source: $source,
 match: (source) => (source ? "one" : "two"),
 cases: { one, two },
});
источник