Приведи пример использования Effector в Next

Ответ

Effector отлично интегрируется с Next.js, особенно с App Router. Вот пример:

// store.ts
import { createStore, createEvent } from 'effector';

export const increment = createEvent();
export const $count = createStore(0)
  .on(increment, (state) => state + 1);

// app/layout.tsx
import { Provider } from 'effector-react';
import { $count, increment } from './store';

export default function RootLayout({ children }) {
  return (
    <Provider>
      <html>
        <body>{children}</body>
      </html>
    </Provider>
  );
}

// app/page.tsx
'use client';
import { useStore } from 'effector-react';
import { $count, increment } from './store';

export default function Home() {
  const count = useStore($count);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => increment()}>Increment</button>
    </div>
  );
}

Ключевые моменты:

  1. Используем Provider в корневом layout
  2. Для клиентских компонентов добавляем 'use client'
  3. Состояние сохраняется при навигации
  4. Для SSR можно использовать fork и serialize