برنامه نویسی

5 قلاب سفارشی برتر برای React

سلام به همه Slao است ،
موارد زیر 5 قلاب برتر مناسب و جدید برای همه خواهد بود که همه بتوانند از آن استفاده کنند

usemediaquery

Usemediaquery به نمایش داده های رسانه ای گوش می دهد و به شما امکان می دهد انواع یا رفتارهای خاصی را بر اساس اندازه تجهیزات اعمال کنید

import { useEffect, useState } from 'react';

function useMediaQuery(query) {
  const [matches, setMatches] = useState(false);

  useEffect(() => {
    const mediaQuery = window.matchMedia(query);
    setMatches(mediaQuery.matches);

    const handler = event => setMatches(event.matches);
    mediaQuery.addEventListener('change', handler);

    return () => mediaQuery.removeEventListener('change', handler);
  }, [query]);

  return matches;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

استفاده کردن

const isLargeScreen = useMediaQuery('(min-width: 1024px)');

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

استفاده

HOOK CEASEWEBECKETE برنامه شما را به سرور WebSocket متصل می کند و به راحتی داده های زمان واقعی را ارسال و دریافت می کند. این اتصالات ، بافر پیام و رسیدگی به رویدادها را پردازش می کند و به روزرسانی آن آسان است

این مثال یک Webocket Hook را ارائه می دهد که می تواند با مدیریت اتصال ، پردازش رویدادها و ویژگی های تمیز کننده به طور مرتب مورد استفاده قرار گیرد.

import { useState, useEffect, useRef, useCallback } from 'react';

function useWebSocket(url, options = {}) {
  const { reconnect = true, reconnectInterval = 5000, onOpen, onMessage, onError, onClose } = options;
  const [isConnected, setIsConnected] = useState(false);
  const [lastMessage, setLastMessage] = useState(null);
  const websocketRef = useRef(null);
  const reconnectTimeout = useRef(null);

  const connect = useCallback(() => {
    websocketRef.current = new WebSocket(url);

    websocketRef.current.onopen = (event) => {
      setIsConnected(true);
      onOpen && onOpen(event);
    };

    websocketRef.current.onmessage = (event) => {
      setLastMessage(event.data);
      onMessage && onMessage(event);
    };

    websocketRef.current.onerror = (event) => {
      onError && onError(event);
    };

    websocketRef.current.onclose = (event) => {
      setIsConnected(false);
      onClose && onClose(event);
      if (reconnect) {
        reconnectTimeout.current = setTimeout(connect, reconnectInterval);
      }
    };
  }, [url, reconnect, reconnectInterval, onOpen, onMessage, onError, onClose]);

  const sendMessage = useCallback((message) => {
    if (isConnected && websocketRef.current) {
      websocketRef.current.send(message);
    }
  }, [isConnected]);

  useEffect(() => {
    connect();

    return () => {
      if (websocketRef.current) {
        websocketRef.current.close();
      }
      clearTimeout(reconnectTimeout.current);
    };
  }, [connect]);

  return { isConnected, sendMessage, lastMessage };
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ویژگی های UseWebocket

  • انتقال مجدد: اگر اتصال بسته شود ، پس از مدت زمان مشخصی به طور خودکار دوباره وصل می شود
  • رسیدگی به رویداد: ویژگی هایی را برای تماس با Onopen ، OnMessage ، OnError و Onclose قبول کنید تا در صورت لزوم رسیدگی کنید
  • ارسال پیام: انرژی SendMessage را فراهم می کند که فقط هنگام باز شدن WebSocket پیام را ارسال می کند
  • آخرین ذخیره پیام: آخرین داده های دریافت شده را ذخیره کنید ، نزدیکترین داده ها را بدون ثبت نام بپذیرید.

استفاده کردن

function ChatApp() {
  const { isConnected, sendMessage, lastMessage } = useWebSocket('ws://localhost:4000/chat', {
    reconnect: true,
    reconnectInterval: 3000,
    onOpen: () => console.log('Connected to WebSocket'),
    onMessage: (event) => console.log('New message received:', event.data),
    onClose: () => console.log('Disconnected from WebSocket'),
  });

  const [inputValue, setInputValue] = useState('');

  const handleSend = () => {
    sendMessage(inputValue);
    setInputValue('');
  };

  return (
    

فهرست مطالب

WebSocket Chat

Last Message:

{lastMessage}

); }
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ارباب

شناسایی ماوس از طریق یک عنصر برای رسیدگی به ابزارها ، انیمیشن ها یا هر بازخورد UI در مورد ماوس

import { useState, useRef, useEffect } from 'react';

function useHover() {
  const [hovered, setHovered] = useState(false);
  const ref = useRef(null);

  useEffect(() => {
    const handleMouseOver = () => setHovered(true);
    const handleMouseOut = () => setHovered(false);
    const node = ref.current;
    if (node) {
      node.addEventListener('mouseover', handleMouseOver);
      node.addEventListener('mouseout', handleMouseOut);
    }
    return () => {
      if (node) {
        node.removeEventListener('mouseover', handleMouseOver);
        node.removeEventListener('mouseout', handleMouseOut);
      }
    };
  }, [ref]);

  return [ref, hovered];
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

const [hoverRef, isHovered] = useHover();

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در حالی که در Debounce

جلوگیری از فعال شدن سریع وقایع ، استفاده شده ممکن است برای زمینه های ورودی یا میله های جستجو مفید باشد

import { useState, useEffect } from 'react';

function useDebounce(value, delay) {
  const [debouncedValue, setDebouncedValue] = useState(value);

  useEffect(() => {
    const handler = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    return () => clearTimeout(handler);
  }, [value, delay]);

  return debouncedValue;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

const debouncedSearchTerm = useDebounce(searchTerm, 500);

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

useInfinitesCroll

Hook UseInfinitesCroll برای یافتن داده ها هنگام پایین آمدن کاربران بسیار مفید است. این می تواند برکاتی مانند بارگیری ، رسیدگی به خطا ، صفحه بندی را تحمل کند …

import { useState, useEffect, useRef, useCallback } from 'react';

function useInfiniteScroll(fetchData, options = {}) {
  const { threshold = 0.8, hasMore = true } = options;
  const [data, setData] = useState([]);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);
  const observerRef = useRef();

  const loadMore = useCallback(async () => {
    if (loading || !hasMore) return;
    setLoading(true);
    setError(null);
    try {
      const newData = await fetchData();
      setData((prevData) => [...prevData, ...newData]);
    } catch (err) {
      setError(err);
    } finally {
      setLoading(false);
    }
  }, [fetchData, loading, hasMore]);

  useEffect(() => {
    if (!hasMore) return;

    const observer = new IntersectionObserver(
      (entries) => {
        if (entries[0].isIntersecting) {
          loadMore();
        }
      },
      { threshold }
    );

    if (observerRef.current) observer.observe(observerRef.current);

    return () => {
      if (observerRef.current) observer.unobserve(observerRef.current);
    };
  }, [loadMore, hasMore, threshold]);

  return { data, loading, error, observerRef };
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

function InfiniteScrollList() {
  const fetchMoreData = async () => {
    const response = await fetch('/api/data'); // Example API
    return response.json();
  };

  const { data, loading, error, observerRef } = useInfiniteScroll(fetchMoreData, {
    threshold: 0.9,
    hasMore: true
  });

  return (
    
{data.map((item, index) => (

{item}

))} {loading &&

Loading...

} {error &&

Error loading data...

}
); }
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا