Получи случайную криптовалюту за регистрацию!

Заметки про React

Логотип телеграм канала @ru_react_notes — Заметки про React З
Логотип телеграм канала @ru_react_notes — Заметки про React
Адрес канала: @ru_react_notes
Категории: Технологии
Язык: Русский
Количество подписчиков: 1.62K
Описание канала:

Короткие заметки про React.js, TypeScript и все что с ним связано
Контакт: @rimlin

Рейтинги и Отзывы

2.00

2 отзыва

Оценить канал ru_react_notes и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

0

3 звезд

1

2 звезд

0

1 звезд

1


Последние сообщения 8

2021-12-14 15:30:01 Музей стейт менеджеров для React

Гант Лаборд создал репозиторий с примерами приложений, где используются разные стейт менеджеры. Все приложения одинаковые - стандартный туду лист, отличается только используемый в них стейт менеджер. Каждый пример можно посмотреть в работе на codesandbox и увидеть саму реализацию на github.

Сейчас в репозитории реализовано больше 35 стейт менеджеров для React. Также есть примеры реализации для React Native. Среди примеров есть как популярные Redux и Recoil, так и менее известные, например, microstates.

Репозиторий активно развивается и можно помочь, добавив свои примеры. Странно, что до сих пор еще нет nanostores и effector.

https://github.com/GantMan/ReactStateMuseum
567 viewsIlmir Shaikhutdinov, 12:30
Открыть/Комментировать
2021-12-13 14:30:47 Почему стоит обратить внимание на Remix

Remix – это новый фулстек фреймворк на React. Фреймворк из коробки поддерживает технологию прогрессивного улучшения, что гарантирует работу практически во всех браузерах.

При разработке на Remix необходимо соблюдать определенные условности, начиная от структуры проекта и наименования файлов до экспортов внутри модуля.

Каждый модуль экспортирует API, которое будет использовать Remix при компиляции проекта. Экспортируемая переменная loader определяет функцию, которая будет вызываться на сервере перед рендерингом компонента, чтобы подготовить данные. Получить эти данные в компоненте можно через хук useLoaderData. Основной способ передачи информации с клиента на сервер – формы. Для обработки форм в модуле экспортируется переменная action. Внутри функции action можно валидировать поля, обращаться к базе данных и возвращать ответ. Ответ на стороне клиента можно получить через хук useActionData, в котором, например, могут приходить ошибки валидации. Экспорт default – это сам компонент.

Remix состоит из компилятора, серверного HTTP обработчика, серверного фреймворка и браузерного фреймворка. С помощью компилятора каждый модуль превращается в браузерный бандл и в бандл для серверного HTTP обработчика. Серверные HTTP обработчики позволяют запускать сервер как на Node.js серверах, так и на serverless серверах, например, Cloudflare Workers. Серверный фреймворк позволяет для каждого роута добавить функцию подготовки данных loader и функцию обработки формы action. Браузерный фреймворк позволяет работать приложению как SPA, дает возможность использовать хуки для взаимодействия с сервером, а также предзагружает ресурсы для страниц сайта.

Пример Remix модуля:

// routes/todos.js
import { redirect, Form } from "remix";

export async function loader() {
return fakeGetTodos();
}

export async function action({ request }) {
const body = await request.formData();
const todo = await fakeCreateTodo({
title: body.get("title")
});
return redirect(`/todos/${todo.id}`);
}

export default function Todos() {
const data = useLoaderData();
return (







);
}


https://remix.run/docs/en/v1

https://blog.plasmic.app/posts/why-remix-is-worth-your-attention/
528 viewsIlmir Shaikhutdinov, 11:30
Открыть/Комментировать
2021-12-10 12:05:08 Паттерн загрузки данных с Toast & SWR

Теодор Кларенс в своем блоге описывает подход к загрузке данных через кастомный хук и использование нотификаций.

При загрузке данных необходимо отображать пользователю текущий статус загрузки. Это может быть индикатор загрузки, сообщение об ошибке или сообщение об успешной загрузки. Также, если отправляется форма, то необходимо задизейблить кнопку отправки, чтобы форма не отправлялась больше одного раза. Для работы описанного поведения в крайнем случае необходимо заводить как минимум 3 стейта. Для переиспользования логики можно создать кастомный хук.

Теодор Кларенс использовал react-hot-toast для отображения текущего статуса загрузки в виде нотификаций. Библиотека react-hot-toast умеет принимать промис и отображать сообщение в зависимости от состояния промиса. Для получения данных используется библиотека swr, которая умеет кэшировать ответы на запросы и обновлять кэш при повторном обращении.

const { data: pokemonData, isLoading } = useWithToast(
useSWR('https://pokeapi.co/api/v2/pokemon?limit=20')
);


https://theodorusclarence.com/blog/react-loading-state-pattern
662 viewsIlmir Shaikhutdinov, 09:05
Открыть/Комментировать
2021-12-08 18:15:07 Конференция React Conf 2021

Уже сегодня пройдет очередная ежегодная конференция React Conf 2021. Будет очень много тем про React 18.
Начало в 21:00 по Москве. Расписание докладов:

8 декабря 2021 г., 21:00 React 18 Keynote (Andrew Clark, Lauren Tan, Juan Tejada, Ricky Hanlon)
21:34 React 18 for app developers (Shruti Kapoor)
21:53 Streaming Server Rendering with Suspense (Shaundai Person)
22:12 The first React Working Group (Aakansha Doshi)
22:27 React Developer Tooling (Brian Vaughn)
22:27 React without memo (Xuan Huang)

23:00 React Docs Keynote (Rachel Nabors)
23:11 Things I learnt from the new React docs (Debbie O'Brien)
23:20 Learning in the Browser (Sarah Rainsberger)
23:31 The ROI of Designing with React (Linton Ye)
23:42 Interactive playgrounds with React (Delba de Oliveira)

9 декабря 2021 г., 0:00 Re-introducing Relay (Robert Balicki)
00:20 React Native Desktop (Eric Rozell, Steven Moyes)
00:36 On-device Machine Learning for React Native (Roman Rädle)

01:00 React 18 for External Store Libraries (Daishi Kato)
01:20 Building accessible components with React 18 (Diego Haz)
01:29 Accessible Japanese Form Components with React (Tafu Nakazaki)
01:39 UI Tools for Artists (Lyle Troxell)
01:49 Hydrogen + React 18 (Helen Lin)

https://conf.reactjs.org/
https://discord.gg/reactconf
721 viewsIlmir Shaikhutdinov, 15:15
Открыть/Комментировать
2021-12-08 11:20:05
Расширение для отладки React приложений – Reactime

Инструмент позволяет отследить количество рендеров компонента и среднее время рендера. Киллер-фичей расширения является возможность переключения текущего состояния приложения – time-traveling, как в Redux DevTools.

Принцип работы расширения заключается в обходе дерева React Fiber и в сборе информации о рендере компонента. Reactime сохраняет каждый снапшот рендера компонента, включая стейт и время рендера, после чего строит граф компонентов. Расширение умеет сохранять стейт как у классовых компонентов, так и у функциональных, которые используют хуки.

Для работы расширения не требуется каких-то изменений в коде проекта, достаточно запустить его в браузере и иметь уже предустановленный React DevTools.

https://chrome.google.com/webstore/detail/reactime/cgibknllccemdnfhfpmjhffpjfeidjga?hl=en-US

https://medium.com/@liuedar/what-time-is-it-reactime-fd7267b9eb89
624 viewsIlmir Shaikhutdinov, 08:20
Открыть/Комментировать
2021-12-06 13:45:10 Как заменить useState на useRef и выиграть в производительности

Основной способ вызвать ререндер компонентов в React заключается в изменении стейта. Использование стейта в компонентах – это безопасный вариант работы с динамическими значениями: мы всегда будем уверены, что при изменении стейта произойдет ререндер компонента.

Не всегда использование стейта целесообразно, бывают случаи, когда от него можно отказаться. Правда, иногда при отказе от стейта, можно выстрелить себе в ногу, но если сделать все правильно, то можно увеличить производительность приложения.

Стейт обязательно нужно использовать в двух случаях: когда стейт влияет на DOM, участвуя в рендере компонента, и когда необходимо вызывать эффект useEffect.

Ситуации, когда стейт можно не использовать:
- Если значения нужны только в коллбэках, то используйте рефы.
- Буферизация изменений стейта. Если колбек вызывается слишком часто и в нем происходит изменение стейта, то возможно будет эффективнее запланировать изменение стейта используя requestAnimationFrame.
- Императивное изменение DOM узла. Например, если реализуется анимация, то гораздо эффективнее напрямую изменять стили DOM узла. Если для анимации использовать стейт, то потребуется очень много ререндеров компонента, что повлияет на производительность.

https://thoughtspile.github.io/2021/10/18/non-react-state/
614 viewsIlmir Shaikhutdinov, 10:45
Открыть/Комментировать
2021-12-03 13:30:06 Краткое знакомство с Elm для React разработчиков

Elm – это язык, разработанный для создания интерфейсов приложения, предлагающий альтернативу JS библиотекам, таким как React.

Под капотом Elm, как и в React, используется виртуальный DOM, а также оба используют декларативный стиль для описания UI. Основное отличие между ними в том, что React – это JavaScript библиотека, а Elm – функциональный язык, разработанный с нуля для декларативного создания веб-интерфейсов.

Одной из особенностей Elm является мощная типизация, которая позволяет отловить и предупредить о граничных случаях. В результате строгой типизации, при работе приложения практически отсутствуют ошибки в рантайме.

Пример счетчика на Elm:

type Msg = Increment | Decrement

init = { count = 0 }

update msg model =
case msg of
Increment -> { model | count = model.count + 1 }
Decrement -> { model | count = model.count - 1 }

view model =
div []
[ button [ onClick Decrement ] [ text "-" ]
, text (String.fromInt model.count)
, button [ onClick Increment ] [ text "+" ]
]


https://blog.theodo.com/2021/10/intro-to-elm-for-react-devs/
683 viewsIlmir Shaikhutdinov, 10:30
Открыть/Комментировать
2021-12-01 11:01:03 Фасад при использовании UI библиотеки

Кайл Шевлин делится архитектурным приемом при использовании сторонних UI библиотек: для каждого UI компонента из библиотеки создать компонент-фасад и использовать его в проекте. Например:

import React from 'react'
import { Button as ChakraButton } from '@chakra-ui/react'

export default function Button(props) {
return
}

Само собой, такой вариант использования UI библиотеки не подходит всем проектам. Иногда, в больших и долгоживущих проектах, бывают изменения в дизайне UI компонента. В этом случае, вариант с использованием фасада облегчает работу над этими изменениями, сведя все изменения в одном компоненте.

При использовании фасада также можно:
- Легко изменить UI библиотеку. Так как привязка к UI библиотеке только в определенных компонентах, то сделать это гораздо проще, чем без использования фасада.
- Добавить или ограничить пропсы UI компонентов.
- Переименовать или переназначить пропсы UI компонентов.

https://kyleshevlin.com/how-I-would-use-a-ui-library
701 viewsIlmir Shaikhutdinov, 08:01
Открыть/Комментировать
2021-11-29 13:30:52 Вышел React Router v6

В React Router v6 добавлены новые фичи, улучшена поддержка с последними версиями React. Также новая версия содержит несколько критических изменений по сравнению с пятой версией. В React Router v6 активно используются хуки, поэтому для работы требуется версия React 16.8 и выше.

- Вместо используйте . Внутри все роуты и ссылки будут относительными. Этот подход упростит работу с вложенными роутами, не нужно будет использовать match.url.

- Используется элемент вместо компонента в роутах . Для рендера можно передать любой элемент в проп element. Вложенные роуты задаются в children.

function App() {
return (


} />
}>
} />
} />



);
}

function Users() {
return (





);
}

- Добавлен компонент . Позволяет отображать вложенный UI при рендере дочерних роутов. Также в добавлен проп index, который работает в связке с . Если родительский роут соответствует текущему URL браузера, то будет отрендерен , если он есть среди дочерних роутов.

- Изменения в . Были оставлены только два типа плейсхолдера: :id и * в конце пути. Была удалена поддержка RegExp в пути. Чувствительность к регистру пути переехала в .

- Изменилось поведение . Если путь в to не начинается с /, то он будет рендерить ссылку, относительную роуту, в котором был отрендерен. Использование в .. удаляет сегмент родительского роута, а не URL.



path=":id/messages"
element={
// Ссылка ведет в /users

}
/>



- Добавлены новые хуки. Если храните роуты в виде объекта и используете react-router-config, то в v6 есть хук useRoutes для рендера роутов в виде объекта.
Вместо useHistory используйте useNavigate. Чаще всего будет достаточно переименовать название хука и изменить вызовы history.push или history.replace на navigate. Хук useNavigate полезен тем, что поддерживает React Suspense. Например, если был переход с роута, который еще не был загружен, то происходит замена URL, а не пуш в историю браузера.

https://reactrouter.com/docs/en/v6/upgrading/v5
739 viewsIlmir Shaikhutdinov, 10:30
Открыть/Комментировать
2021-11-26 09:30:30 React стейты с фрагментированным стором

Teaful – крошечная библиотека для управления состоянием приложения. Её особенность заключается в фрагментированном сторе, который позволяет избежать повторного рендеринга компонентов. С помощью Teaful каждое поле стора можно использовать отдельно, поэтому при обновлении других полей стора, которые не используются, компонент не будет рендерится заново.

Под капотом Teaful использует контексты. Для каждого поля стора создается отдельный провайдер и хук-потребитель.

https://dev.to/aralroca/react-state-with-a-fragmented-store-18ff
https://habr.com/ru/company/skillfactory/blog/591605/

https://github.com/teafuljs/teaful
677 viewsIlmir Shaikhutdinov, 06:30
Открыть/Комментировать