Giter Club home page Giter Club logo

reactuse's Introduction

πŸš€ React Use

the largest and most useful hook library

πŸ¦‰ Philosophy

πŸš€ React Use this is a library that will allow you to easy and simple to use React hooks. Unlike its competitors, this package takes into account the features of React and also contains a huge number of useful hooks.

Features

  • TypeScript support out of the box - full typed package
  • SSR - package work with server side render

reactuse's People

Contributors

debabin avatar str0yka avatar leendrew avatar awsjhbc avatar belk1ng avatar gorilladevq avatar ppitohu avatar wmoooid avatar waldymarxthf avatar crashmax-dev avatar daniilbatiuk avatar ceylar37 avatar dacorm avatar alhymalhy avatar nikitadubyk avatar withnoregret avatar yrsluv avatar

Stargazers

Vladimir Govorov avatar Artur Hovhannisyan avatar Vlad Duplinskiy avatar Alexey Mikhaylov avatar Kirill Romanov avatar Vladislav Porvin avatar Tema avatar  avatar The Annley avatar Dumitru Luca avatar Kirill Tyukalov avatar Nikita Gusev avatar πŸ“› mkas3 avatar Egor Ivankov avatar Kiselev Ilya avatar  avatar  avatar Daniil Oberlev avatar Nazar Jumayew avatar Daria avatar vladislav avatar  avatar Maxim Zarubitsky avatar  avatar Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ avatar  avatar Vadim avatar Egor Kondratev avatar Ali Adigezalli avatar trxini avatar Tilek Kulamnazarov avatar succsesss avatar  avatar  avatar Dripa Alexandr avatar Alexander Deputat avatar Roman Kokorev avatar  avatar oldiBerezko avatar Sergius avatar Krimax0 avatar  avatar Maksim avatar  avatar kvarcev avatar Dmitriy avatar Ivan Mitrofanov avatar Danila Voronkov avatar Denis avatar Volkov Dmitriy avatar Dmitry avatar Andrejs Agejevs avatar Alexandr Obrazkov avatar  avatar smthlkths. avatar  avatar Roman Paravaev avatar Valeriy Vartumyan avatar Mark Partola avatar Kocherinskii Nikita avatar Denis avatar Mark Elan avatar Alexander Osipov avatar  avatar Uladzislau Kviatkouski avatar Danya avatar Vlad Gapanovich avatar Dima avatar Eduard Kluchnikov avatar  avatar Nikita Novitsky avatar Nikita avatar  avatar Andrew Ganzha avatar prayerr_ avatar looleeluu avatar Dmitry Andreyev avatar Dant avatar Anton avatar Kowka_VN avatar Nikita Beliaew avatar solexofficial avatar Nikita Zarutskiy avatar Aleksei Martynenko avatar Igor Goryany avatar Igor Kolpakov avatar Exclsv3101 avatar derus15 avatar  avatar Evgeniy Shushkov avatar Π•Π³ΠΎΡ€ Π“ΠΎΠ²ΠΎΡ€ΠΎΠ² avatar  avatar Vlad Prodan avatar  avatar Danil avatar Daniil Rybakov avatar Pavel Efimenko avatar Alexander avatar  avatar Maxim Tulupov avatar

Watchers

Raijinhasarrived avatar

reactuse's Issues

[Bug]: Π₯ΡƒΠΊ useDocumentTitle

Благодаря Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ тСст-кСйсу (Π½ΠΈΠΆΠ΅), ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°Π³: ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пишСм Π±Π΅Π· typescript (Π΄Π°, Ρ‚Π°ΠΊ Π²ΠΎΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ) ΠΈ Ссли ΠΌΡ‹ случайно ΠΈΠ»ΠΈ осознано Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² setTitle Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΎΡ‚ строки, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡ€Π°ΡˆΠΈΡ‚ΡΡ.

Π‘Π½ΠΈΠΌΠΎΠΊ экрана 2024-05-26 Π² 14 03 52

Ошибка происходит Π² этом мСстС (Π½ΠΈΠΆΠ΅, 57 строка), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π½Π΅ провСряСм Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈ Ρ‚ΠΈΠΏ value ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ trim().

Π‘Π½ΠΈΠΌΠΎΠΊ экрана 2024-05-26 Π² 14 07 57

hook: `useCounter`

const [count, setCount] = React.useState(initialValue ?? min ?? 0);
Если initialValue = undefined Ρ‚ΠΎ count = min = -Infinity.

Π’ случаи обновлСния min ΠΈ max ΠΈΠ· Π²Π½Π΅ (ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅) count Π½Π΅ подстраиваСтся ΠΏΠΎΠ΄ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

const minCount = useCounter(0);
const maxCount = useCounter(100, { min:  minCount.count + 1 });

const { count }  = useCounter(0, { min: minCount.count, max: maxCount.count });

<button onClick={() => minCount.inc()}>+</button>
<span>{count}</span> // 0 - всСгда

Π‘Ρ‚Ρ€Π°Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ мСмоизация Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

const minCount = useCounter(0);

const { count, inc } = useCounter(0, { min: minCount.count, max: maxCount.count });

const memoInc = useCallback(() => {
  inc()
}, [minCount.count]);

[feat]: Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ…ΡƒΠΊ useHash

Часто Π±Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ трСбуСтся ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ window.location.hash ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ стСйта(ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π°Π±ΠΎΠ²).

Reference:

'use client';
import { useEffect, useState } from 'react';

const getHash = () => (typeof window !== 'undefined' ? decodeURIComponent(window.location.hash.replace('#', '')) : undefined);

const useHash = () => {
  const [hash, setHash] = useState(getHash());

  useEffect(() => {
    const handleHashChange = () => {
      setHash(getHash());
    };
    window.addEventListener('hashchange', handleHashChange);
    return () => {
      window.removeEventListener('hashchange', handleHashChange);
    };
  }, []);

  return hash;
};

export default useHash;

[feat]: Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ…ΡƒΠΊ useWebSocket

useWebSocket Ρ…ΡƒΠΊ, позволяСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π½Π° websocket сСрвСра.

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

const connectSocket = (url: string) => {
  return new WebSocket(url);
};

interface IOptions {
  onFail: () => void;
  onSuccess: () => void;
}

export const useWebSocket = (
  url: string,
  onMessage: (message: MessageEvent) => void,
  options?: IOptions
) => {
  const ws = useRef<WebSocket | null>(null);
  const [isOpen, setIsOpen] = useState<boolean>(false);
  const [waitingToReconnect, setWaitingToReconnect] = useState<any>(null);

  const send = (data: string) => {
    ws.current?.send(data);
  };

  useEffect(() => {
    if (waitingToReconnect) return;

    const setupWebSocket = () => {
      const client = connectSocket(url);
      ws.current = client;

      client.onerror = (e) => {
        if (options?.onFail) {
          options?.onFail();
        }
        console.error('WebSocket error:', e);
      };

      client.onopen = () => {
        setIsOpen(true);
        if (options?.onSuccess) {
          options?.onSuccess();
        }
      };

      client.onmessage = (message) => {
        onMessage(message);
      };

      client.onclose = () => {
        if (waitingToReconnect) return;

        setIsOpen(false);

        setWaitingToReconnect(true);

        setTimeout(() => {
          setWaitingToReconnect(null);
        }, 5000);
      };
    };

    setupWebSocket();

    return () => {
      if (ws.current) {
        ws.current.close();
        ws.current = null;
      }
    };
  }, [url, waitingToReconnect]);

  return { client: ws.current, open: isOpen, send };
};



import { useWebSocket } from './path-to-your-hook';

const MyComponent = () => {
  const { client, open, send } = useWebSocket('wss://serverws.com/', (message) => {
    console.log(message.data);
  }, {
    onFail: () => console.log('Connection failed'),
    onSuccess: () => console.log('Connection successful')
  });

  const handleSend = () => {
    if (open) {
      send('Hello, world!');
    }
  };

  return (
    <div>
      <button onClick={handleSend} disabled={!open}>Send Message</button>
      <p>WebSocket is {open ? 'open' : 'closed'}</p>
    </div>
  );
};```

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.