Перейти к основному содержимому
import {createEvent, createStore, createEffect, 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

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

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

Sber
MTS
Raiffeisen Bank Russia
Avito
Docsvision
Okoo
REDMADROBOT
Junto
space307
StellarX
STM Labs
automation hero
Radity
Global CTO Forum
Aviasales
Хотите попасть в этот список? Расскажите нам