Notice: file_put_contents(): Write of 16723 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50
Frontender Libs - обзор библиотек JS / CSS@sWebDev P.3858
SWEBDEV Telegram 3858
Синхронизация состояния компонента с URL

Кастомный хук useQueryState инкапсулирует логику синхронизации состояния с URL-параметрами. Данный подход объединяет useState и useSearchParams, очищая код компонента и беря начальное значение из URL.

Для обновления применяется useLayoutEffect, гарантируя изменение адресной строки до отрисовки браузером и исключая визуальную рассинхронизацию.

import { useState, useLayoutEffect } from 'react';
import { useSearchParams } from 'react-router-dom';

function useQueryState(queryKey, initialValue) {
const [searchParams, setSearchParams] = useSearchParams();

const [value, setValue] = useState(
searchParams.get(queryKey) ?? initialValue
);

useLayoutEffect(() => {
const newParams = new URLSearchParams(searchParams);
newParams.set(queryKey, value);
setSearchParams(newParams);
}, [value, queryKey, searchParams, setSearchParams]);

return [value, setValue];
}


👉 @sWebDev
👍3



tgoop.com/sWebDev/3858
Create:
Last Update:

Синхронизация состояния компонента с URL

Кастомный хук useQueryState инкапсулирует логику синхронизации состояния с URL-параметрами. Данный подход объединяет useState и useSearchParams, очищая код компонента и беря начальное значение из URL.

Для обновления применяется useLayoutEffect, гарантируя изменение адресной строки до отрисовки браузером и исключая визуальную рассинхронизацию.

import { useState, useLayoutEffect } from 'react';
import { useSearchParams } from 'react-router-dom';

function useQueryState(queryKey, initialValue) {
const [searchParams, setSearchParams] = useSearchParams();

const [value, setValue] = useState(
searchParams.get(queryKey) ?? initialValue
);

useLayoutEffect(() => {
const newParams = new URLSearchParams(searchParams);
newParams.set(queryKey, value);
setSearchParams(newParams);
}, [value, queryKey, searchParams, setSearchParams]);

return [value, setValue];
}


👉 @sWebDev

BY Frontender Libs - обзор библиотек JS / CSS




Share with your friend now:
tgoop.com/sWebDev/3858

View MORE
Open in Telegram


Telegram News

Date: |

Done! Now you’re the proud owner of a Telegram channel. The next step is to set up and customize your channel. Concise More>> ‘Ban’ on Telegram End-to-end encryption is an important feature in messaging, as it's the first step in protecting users from surveillance.
from us


Telegram Frontender Libs - обзор библиотек JS / CSS
FROM American