Перейти к основному содержимому
import {createEvent, createStore, createEffect, combine, sample} from 'effector'

const nextPost = createEvent()

const getCommentsFx = createEffect(async postId => {
const url = `posts/${postId}/comments`
const base = 'https://jsonplaceholder.typicode.com'
const req = await fetch(`${base}/${url}`)
return req.json()
})

const $postComments = createStore([])
.on(getCommentsFx.doneData, (_, posts) => posts)

const $currentPost = createStore(1)
.on(getCommentsFx.done, (_, {params: postId}) => postId)

const $status = combine(
$currentPost, $postComments, getCommentsFx.pending,
(postId, comments, isLoading) => isLoading
? 'Загрузка поста...'
: `Пост ${postId} имеет ${comments.length} комментариев`
)

sample({
source: $currentPost,
clock: nextPost,
fn: postId => postId + 1,
target: getCommentsFx,
})

$status.watch(status => {
console.log(status)
})
// => Пост 1 имеет 0 комментариев

nextPost()

// => Загрузка поста...
// => Пост 2 имеет 5 комментариев

Преимущества

Типизация

Типизация

Поддержка TypeScript в комплекте поставки

Независимость от фреймворков

Независимость от фреймворков

Работает с любыми UI и серверными фреймворками

Удобство в разработке

Удобство в разработке

Логичный API и отзывчивое сообщество

Производительность

Производительность

Статическая инициализация улучшает производительность

Малый размер

Малый размер

Эффектор - компактная библиотека и поддерживает tree-shaking

Чистый, предсказуемый javascript

Чистый, предсказуемый javascript

Никаких прокси и классов

Компании уже использующие эффектор

Aviasales
Health Samurai
Raiffeisen Bank Russia
UNICEF (United Nations Children’s Fund)
Joom Group
Sber
Avito
MTS
Docsvision
Okoo
space307
REDMADROBOT
Travelpayouts
Junto
automation hero
Radity
Global CTO Forum
Express24
StellarX
STM Labs
TenPixls
Uptarget
смартомато
Фоксфорд
Codengage
Lunatask
Semrush
Intouch Health, a Teladoc company
Хотите попасть в этот список? Расскажите нам