All streams
Search
Write a publication
Pull to refresh
55
0
maeris @maeris

User

Send message

Я тут тоже пять копеек вставлю

Redux в качестве стейт менеджера? - Категорически нельзя

Конечно, нельзя, авторы как будто постарались сделать максимально неудобно и бойлерплейтно, но когда дело доходит до SSR или, не дай боже, undo, с mobx проблем всё-таки больше. Я экспериментировал с тем, чтобы redux починить (может, даже пост напишу, раз просят), чтобы там типы сходились, селекторы не были нужны, изменения в коде были локальными, обновления массивов занимали логарифмическое время и так далее, но наткнулся на крайне неприятные баги в typescript, которые испортили всю малину. Честно говоря, "хорошего" стейт менеджера я ни разу не видел, и даже смутно представляю, как он должен выглядеть.

onClick={this.toggle}

Тут, кстати, не так и важно. Если пользоваться, например, хуками, у вас будет два варианта:

  • useCallback, который внутри будет проверять, что dependencies не поменялись, что занимает время, и

  • вот как у автора написано. Так как висит обработчик не на компоненте, будет обновлено только поле в Set на новый метод, потому что у React синтетические события и слушатель на самом деле вешается один на root. Никаких дорогих вызовов в DOM при этом нет.

В общем, даже без такой оптимизации это дёшево (хоть и небезопасно, потому что кто-нибудь на компонент может отрефакторить и не вынести), и даже с хуками дешевле обычно не сделать. Если бы dispatch пробрасывался правильно, то пришлось бы this.toggle.bind(this) в render делать, и всё равно бы ссылка менялась каждый раз. В Legacy API корректное решение только одно: mapDispatchToProps у connect.

Не использовать Typescript? - Категорически нельзя.
SCSS без Css Modules
спасибо что хотя бы не упали до уровня CSS in JS.

Жаль, нельзя три раза плюсануть.

То есть, возможно, там публикации были, но юзер их вынес в черновики.

Так и было. Потеряли актуальность.

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

К сожалению, написать что-то достойное внимания людей довольно тяжело. Для этого нужно, по меньшей мере, знать что-то лучше, чем свои читатели. Это тяжело сделать, если вы не перфекционист или с трудом воспринимаете критику.

Так, раз уж это туториал, и вы показываете, как делать правильно, давайте разбираться, почему так неправильно. Во-первых, где TypeScript?

export default class Checkbox

Не надо ничего export default, вы потом даже переименовать его не сможете. Подробнее тут, но в гугле есть и больше.

&-yellow svg rect

А без svg не подойдёт rect? А rect внутри svg внутри rect внутри svg точно подходит? У вас с такими селекторами потом полный проект soft-important'ов будет, чтобы проблемы с specificity побороть. БЭМ.

return newState;

Редюсер обязан возвращать оригинальный стейт, если он не поменялся. В обработке экшена SET у вас та же ошибка.

import './scss/index.scss';

А если будем переписывать на какой-нибудь postcss, то заведём ещё папку postcss, и будем потом переключаться между тремя папками каждые 10 секунд, да? Почему компоненты не изолированы в одной папке?

import App from './App';

У разработчиков бывают разные операционные системы, у которых разные файловые системы, которые по-разному обрабатывают верхний регистр. Чтобы не получилось фиаско, когда разработчики не могут из гита проект даже счекаутить, в Node (и в целом во фронтэнде) приняли за стандарт именовать файлы в kebab-case. К сожалению, разработчики CRA, которым вы, скорее всего, сделали шаблон этого кода, были не в курсе, но на них не нужно равняться.

import store from '../redux/store.js';

Не надо в глобальную область видимости класть никакое состояние, в том числе store. Вы когда SSR делать будете, потом весь код переписывать. У вас connect для этого есть (а по-хорошему должен был быть useDispatch).

class Checkbox extends React.Component {

Ну, не Component, а PureComponent, и вообще Legacy API в примерах показывать не комильфо. Где хуки?

constructor() { store.dispatch(...) }

А вы сможете рассказать, когда именно здесь вызывается конструктор, что произойдёт, если в это время диспетчеризовать экшены, и как от одного неудачно проставленного key потенциально зависнет вся страница?

this.props.redux[this.props.id]

В JS есть destructuring.

принести данные с сервера (это про axios)

Не нужен. 2022 год на дворе, есть fetch. У кого fetch нет, есть полифилл.

почистить данные (prop-types в компонентах или что-то кастомное ещё на выходе axios)

Сейчас популярен zod для этих целей.

С таким положением мириться нельзя и это, безусловно, требует своего разбирательства и поиска причин случившегося.

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

Другое дело, что SimInTech решил симулировать с каким-то конским шагом, и получился полный треш, а две другие программы просто не умеют antialiasing (ну бывает, научный софт не обязан выглядеть как конфетка).

Ага, и будем читать комментарии к ПРу трёхлетней давности вместо комментариев в коде. Отличный подход, чудесный совет.

Code review существует для проверки и кода, и консистентности комментариев к нему, и никоим образом не освобождает от обязанности комментировать код. Желательно, конечно, чтобы код и без комментариев читался, но на типичной работе вам столько времени на разработку никто не даст.

Кстати, у пульта потребление действительно ничтожное. Почему, интересно, пульты не делают с солнечной батареей (как калькуляторы) или, например, с маленьким магнитом, катающимся в соленоиде?

А что касается ценника и деградации, то аккумулятор для RTC в компьютере живёт годами, и в общем-то довольно дешёвый.

Так эцсамое, возобновляемые источники энергии тоже не выгодны. Нефть жечь легче и задорнее. Но есть один нюанс.

Извините, недостаточно чётко выразился: почему вы используете именно батарейки?

Спасибо, у меня никогда фантазия не рисовала картину будущего, где во дворах валяются сверхпроводники, а дети ими бросаются в стену.

Кстати, а почему вы не используете аккумуляторы?

А как вы тестировали парсеры?

А если кто-то не хочет, чтобы его сайт парсили, и специально невалидный HTML опубликовал, они продолжат работать?

На пропущенном шаге "Получить html сайта" как передавать заголовки так, чтобы не отличили от настоящего пользователя?

Почему не подошла ни одна из десятка библиотек для парсинга через headless браузер?

На самом деле, нам сделали большое одолжение, ведь это мог быть и bold italic comic sans.

О, а вы не знаете, как это работает? Я недавно специально MDN перекапывал, и не нашёл.

А номер карты телеграм сливает?
А пароли от почты?
А фото интимной жизни?

Нет? А почему бы об этом не написать?

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

Вот куда выводить у этой обычной тяги трубу, чтобы отёк лёгких не был у всего квартала, это вопрос, да.

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

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

Да, уже и мечтать не приходится.

О, Переговорки доступными сделали. Так лет за 10, может, половину внутренней инфры доступной сделают.

А вообще для тех, кто не в курсе: крохотный отдел инфраструктурщиков написал невероятное количество инфраструктуры, и получше всякой там продукции Atlassian. К сожалению, Яндекс недостаточно концентрируется на том, чтобы её красивенько оформить и продавать.

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

Information

Rating
Does not participate
Registered
Activity