গাইড · 09

SSR, টেস্টিং আর প্রোডাকশন

সার্ভার রেন্ডারিং, হাইড্রেশন, টেস্ট আর এমন পরিষ্কারকরণের নিয়ম যার ওপর ভরসা করা যায়।

সার্ভার রেন্ডারিং

হুকের মান তার প্রাথমিক মান সার্ভার markup-এ রেন্ডার করে, আর হাইড্রেশনের পরে অ্যানিমেশন চলতে থাকে। React 18 ও নতুন সংস্করণ স্থির ভেরিয়েবল নামের জন্য useId ব্যবহার করে; React 16 আর 17-এর সার্ভারে একটি id দিন।

app/layout.jsx
import { AnimatedProvider } from '@kkwaenggwari/animated';

// The package entry is marked 'use client'. A server layout can render the
// provider directly; hooks and Animated.<tag> go inside Client Components.
export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>
        <AnimatedProvider>{children}</AnimatedProvider>
      </body>
    </html>
  );
}

পুরোনো React-এ স্থির id

শুধু React 16 বা 17 দিয়ে সার্ভার রেন্ডারিংয়ে দরকার।

ssr.jsx
// React 18+ uses useId automatically. On React 16/17 servers, pass a stable id.
const progress = useAnimatedValue(0, { id: 'hero-progress' });

যে পরিষ্কারকরণে ভরসা করা যায়

কম্পোনেন্টের সবকিছু তার সঙ্গেই ছেড়ে দেওয়া হয়।

  • useAnimated, useAnimatedValue, useTimeline আর useReorder আনমাউন্টে নিজেদের কন্ট্রোলার আর listener থামায়।
  • useAnimated-এর factory-তে ঘোষিত কন্ট্রোলার আর ইনপুট নির্ভরতা বদলালে একসঙ্গে প্রতিস্থাপিত হয়।
  • Animated.Keep চলে যাওয়া children-কে তাদের গতির পরে সরায়, আর নতুন pose বর্তমান অবস্থান থেকে বাধা দেয়।
  • React-এর বাইরে bind, bindOutput, createTimeline আর createLayoutScene স্পষ্ট dispose ফেরত দেয়।

টেস্টিং

flushAnimatedUpdates() অপেক্ষমাণ আউটপুট সিঙ্ক্রোনাসভাবে প্রয়োগ করে, যাতে নির্ধারণমূলক টেস্ট DOM যাচাই করতে পারে।

Meter.test.jsx
import { flushAnimatedUpdates } from '@kkwaenggwari/animated';

act(() => progress.setValue(0.5));
flushAnimatedUpdates();
// Pending style writes are applied now; assert on the DOM.

লেখা, অ্যাট্রিবিউট আর প্রপার্টি

useAnimated-এর ভেতরে output(target, mapping) স্টাইল, অ্যাট্রিবিউট, লেখা বা অবজেক্ট প্রপার্টি আউটপুটের মালিক। bindOutput একই ম্যাপিং সঙ্গে সঙ্গে জোড়ে আর flush ও dispose ফেরত দেয়।

Counter.jsx
const label = useRef(null);

const count = useAnimated(
  0,
  (value) => {
    output(label, { text: new AnimatedComputed([value], (v) => `${Math.round(v * 100)}%`) });
    timing(value, { toValue: 1, duration: 1200 });
  },
  [],
);

<span ref={label} />;

খুঁজুন

ডকুমেন্টেশনে খুঁজতে টাইপ করুন।