Задать вопрос
  • Для чего в fetch options добавляют credentials: true?

    credentials нельзя присваивать true (он этого не ожидает).
    https://developer.mozilla.org/en-US/docs/Web/API/F...

    Дайте пример кода, где так делают
    Ответ написан
    7 комментариев
  • Почему useContext выдает ошибку при попытке получить его значения?

    @HealSpirit
    typescript используете?
    Если создаете контекст как объект, то и передавать и использовать нужно как объект:
    export const AuthContext = createContext({})
    
    <AuthContext.Provider value={{currentUser, setCurrentUser}}>  // тут нельзя использовать квадратные скобки при передаче значения
    
    const {currentUser, setCurrentUser} = useContext(AuthContext) // тут нельзя использовать квадратные скобки при деструктуризации


    А если как массив
    export const AuthContext = createContext([])
    
    <AuthContext.Provider value={[currentUser, setCurrentUser]}>  // тут нельзя использовать фигурные скобки при передаче значения
    
    const [currentUser, setCurrentUser] = useContext(AuthContext) // тут нельзя использовать фигурные скобки при деструктуризации


    Например, для массива фиксированной длинный это выглядело бы так
    import {
      createContext,
      useContext,
      useState,
      type FC,
      type Dispatch,
      type SetStateAction,
    } from "react";
    
    type TAuthContext = [string | null, Dispatch<SetStateAction<string>> | null];
    
    export const AuthContext = createContext<TAuthContext>([null, null]);
    
    export const Form: FC = () => {
      const [currentUser, setCurrentUser] = useContext(AuthContext);
    
      return <>1</>;
    };
    
    export const App: FC = () => {
      const [currentUser, setCurrentUser] = useState<string | null>(null);
    
      return (
        <>
          <AuthContext.Provider value={[currentUser, setCurrentUser]}>
            <Form />
          </AuthContext.Provider>
        </>
      );
    };


    Думаю, как сделать в виде объекта, сами разберетесь
    Ответ написан
    6 комментариев
  • На сколько безопасен sql запрос с подстановкой в него данных без обработки с клиента?

    petermzg
    @petermzg
    Самый лучший программист
    Примерно так.
    INSERT INTO users (user_name, user_password) VALUES ('' + (select user_password from users where  user_name = "admin") + '',  '${user_password}')
    Ответ написан
    Комментировать
  • Почему в типе ChangeEvent не находит свойство checked?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Всё довольно просто.

    1) Если у тебя есть типы A, B, C, D, то тип A & (B | C | D) сразу превращается в (A & B) | (A & C) | (A & D) = X | Y | Z

    2) для объекта с типом X | Y | Z ты можешь обратиться к свойству checked, только если оно есть во всех троих типах. Надо объяснять почему?

    3) instanceof в данном конкретном случае сужает тип X | Y | Z до X, в котором это свойство есть, и отбрасывая типы, где его нет.
    Ответ написан
    7 комментариев
  • Что на клиенте создается свою пару ключей для https соединения?

    saboteur_kiev
    @saboteur_kiev Куратор тега Компьютерные сети
    software engineer
    Для того, чтобы создать https, на стороне сервера нужен сертификат.
    Сертификат содержит внутри пару ключей (приватную, публичную), и некоторые другие поля, например доменное имя сайта для валидации.

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

    Сервер получив зашифрованный пакет расшифровывает его приватным ключом и вот у нас есть tls (https) сессия, и уникальный секрет у браузера и у сервера.

    Для каждой новой сессии этот секрет будет генерироваться заново.

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

    Либо ты можешь руками установить сертификат в доверенные. Но самоподписанные нужно будет в каждую систему/браузер руками ставить.
    Ответ написан
    7 комментариев
  • Что на клиенте создается свою пару ключей для https соединения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Когда ты купил (устнановил себе ОС) в ней уже был браузер и в этом браузере прописаны центры сертификации. Это что-то вроде нотариальных контор. Ты им доверяешь по умолчанию. И они по цепочке являются гарантами сертификатов других доменов или других контор. И связка сет доменов + публичный ключ являются реквизитами сертификата. Ты их можешь увидеть в настройках безопасности браузера. И по протоколам TLS/SSL когда ты заходишь на сайт происходит быстрая проверка что интернет домен подтвержден и между вами устанавливается доверительный канал по которому вся инфа от сервера - прогарантирована. Но еще пока не скрыта. Но ввиду того что ассиметричка работает медленно и дорого, на самом деле эта процедура обрамляет другой протокол - создание симметричного канала с временным сеансовым ключом где дальше ты уже работаешь по обычному быстрому симметричному AES например до следующего сеанса обновления ключа. Этот канал уже скрытый от постороеннего наблюдателя. Если запускать openssl с некоторыми
    параметрами то эта процедура рукопожатия будет трассироваться на экран и можно подсмотреть что реально
    происходит у тебя на локалхосте.

    По поводу что там и где устарело. SSL/TLS это просто версии алгоритмов вот этого рукопожатия.
    Ответ написан
  • Как расширить дженерик MutableRefObject добавив в него новое свойство?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Ну какбэ очевидно, что:
    interface MutableRefObject<T> {
      prev: null | HTMLParagraphElement; 
    }


    Если интeрфейс в либе, то:
    declare module 'lib-name' {
      interface MutableRefObject<T> {
        prev: null | HTMLParagraphElement; 
      }
    }

    Или, хуже:
    declare module 'lib-name/full/path/to/declaration.ts' {
      interface MutableRefObject<T> {
        prev: null | HTMLParagraphElement; 
      }
    }


    Но вообще, если для себя то делай так:
    interface MySuperMutableRefObject extends MutableRefObject<T> {
      prev?: null | HTMLParagraphElement; 
    }

    и не трогай библиотечный тип.
    Ответ написан
    6 комментариев
  • При решении каких задач используют генераторы?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    В практике генераторы не используются. Конец. :)

    На самом деле я лично видел ровно два практических кейса использования генераторов:
    1. Использование для асинхронных операций с возможностью прерывания, примеры: redux-saga, mobx actions.
    Суть: допустим ты делаешь какую-то ступенчатую операцию, и нужна возможность резко остановить исполнение извне. На async-ax тебе придётся городить что-то типа:
    async function multiStep() {
      await step1();
      if (stop) throw new Error(stop);
      await step2();
      if (stop) throw new Error(stop);
      await step3();
      if (stop) throw new Error(stop);
    }
    и никак красивее не сделать.
    На генераторе ты можешь просто писать:
    function* multiStep() {
      yield step1();
      yield step2();
      yield step3();
    }

    и просто не брать следующее значение, если исполнение прервалось.

    2. До появления воркеров с их помощью можно было работать с очень большими массивами не вызывая зависания страницы.

    На этом всё.:)
    Ответ написан
    2 комментария
  • Как в sass добавить правило медиа переменной?

    Ankhena
    @Ankhena
    Нежно люблю верстку
    Например, так

    $md: 720px;
    @mixin _md {
      @media (min-width: $md) {
        @content;
      }
    }


    .block {
      color: red;
    
      @include _md {
        color: blue
      }
    }
    Ответ написан
    1 комментарий
  • К какому шаблону проектирования относятся методы create, findAll, fineOne?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Это паттерн репозиторий.

    В общем случае, он предоставляет интерфейс для работы с условной "коробкой": положить, взять, найти.
    Его противопоставляют UnitOfWork. Это как репозиторий, только управление жизненным циклом более явное, как транзакции.

    Здесь есть объяснение, что это такое
    Ответ написан
    Комментировать
  • Для чего мемоизируют аутентификацию?

    Aetae
    @Aetae
    Тлен
    На самом деле useMemo нужен, чтобы при передаче значения как prop в низлежащий memo компонент не происходила перерисовка оного если не было изменений(+при передаче как зависимость в другой хук, тот не срабатывал заново).
    Стоит упустить хотя-бы одно место требующее useMemo и пойдёт водопадом перерисовка на каждый чих каждого компонента по всему дереву вниз. И именно это является основной причиной тормозов в React, а не какие-то там мифические сложные вычисления.

    Официальная позиция React: "говнокодь сейчас, оптимизируй потом", действительно предполагает использование useMemo "только в узких местах" и нигде больше. Прикол в том, что с таким подходом при разрастании проекта никакого "узкого места" просто нет, тормозить начинает просто потому, что складываются тысячи микротормозов от тысяч перерисовок тысяч компонентов: наступает то самое "потом" и тут придётся переписывать с useMemo чуть ли не весь проект, чтоб снизить эти тормоза.
    Именно по этому в реальной работе useMemo стараются таки использовать заранее в каждом месте, где оно потенциально нужно. Некоторые радикальные философии вообще предполагают использование useMemo просто всегда, без исключений.:)
    Ответ написан
    3 комментария
  • Как обезопасить id SERIAL для корректной работы без промежутков значений?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Автоинкрементные ключи вообще лучше не использовать - это вселенское зло!
    Используйте или uuid, или свой какой-то счетчик, или композинтый ключ или хеш, да все что угодно, только не автоинкремент.
    Почему автоинкремент плохо - сотни статей в интернетах.
    Вот на почитать;
    - https://azimutt.app/blog/stop-using-auto-increment...
    - https://www.clever-cloud.com/blog/engineering/2015...
    Ответ написан
    5 комментариев
  • Как обезопасить id SERIAL для корректной работы без промежутков значений?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Примите постулат:

    Никто не должен видеть значений автоинкрементного синтетического ключа, кроме самого сервера.

    AI PK существует только и исключительно для правильной работы встроенной подсистемы СУБД, осуществляющей контроль целостности и непротиворечивости данных. Попытка возложить на такое поле ещё какую-то функцию, тем более функцию, в результате выполнения которой значения этого поля станут видны пользователю (ещё хуже - если эти значения станет необходимо видеть пользователю), немедленно порождает проблемы.
    Причём порождаемые проблемы никак не связаны с основной функцией поля - вот какое пользователя собачье дело, последовательны значения или с разрывами? разрывы влияют на уникальность? нет... или они нарушают нормальную работу ссылочной целостности? нет... или они...? нет... А вся претензия в одном - типа "некрасиво". Аргумент для дураков - потому как значение в таблице БД, а некрасивость в выводе на экран, осуществляемом клиентским приложением. Но если даже отсутствие логики не препятствие, так вон тут рядом советовали - заводишь отдельное поле, в него "свой какой-то счётчик" программный, и поддерживай свою непрерывность хоть до посинения! тем более что сейчас найти (актуальную версию любой) СУБД, не поддерживающую CTE, ROW_NUMBER(), тем более ORDER BY - без шансов.
    Ответ написан
    4 комментария
  • Что нам дает опция declaration если она ничего не меняет в импорте?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Опция declaration влияет на то, будут ли собираться .d.ts файлы при сборке из js в ts.

    Если у Вас рядом лежат файлы user.js и user.d.ts то при импорте user.js из user.d.ts будут взяты для него типы, при этом содержимое user.js будет полностью проигнорировано компилятором ts, оно пойдет в сборку как есть.

    Глобальные типы можно объявить, если положить .d.ts файл в корень проекта (ну или в ту папку, на которую он должен влиять), при этом не должно быть одного имени с .js файлом, то есть должен быть самостоятельным.
    Но правильнее такое делать через опцию types.
    Ответ написан
    2 комментария
  • Как компонент реакта понимает, что к нему привязали хук?

    Aetae
    @Aetae
    Тлен
    Простой ответ: глобальные переменные.:)
    React просто перед самим запуском устанавливает глобальную (условно) переменную указывающую на текущий исполняющийся компонент, на которую и смотрит в сою очередь хук. Именно потому хуки нельзя использовать вне компонента.
    Вот тут я упрощённо изобразил, что дальше происходит внутри useState.

    Конечно всё намного сложнее, но основная суть именно такова. Подробнее - уже в исходники.
    Ответ написан
    2 комментария
  • Next JS это только про SSR или на нём приложение ничем не отличается от реакта?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Next JS это только про SSR

    Это про любой тип веб-приложения:
    - SSR.
    - SSG.
    - ISR.

    Ну а еще, это фактически единственный инструмент, который может все и сразу под React.

    Next JS это тот же реакт в котором сразу есть все необходимые пакеты для работы с ним или он все же медленней обычного spa приложения на реакте с пакетами?

    - Все инструменты в наличие.
    - Next может экспортировать собранное React приложение, после чего - некста там уже не будет, а статика, маршрутизация и реактивность останется. Что быстрее статики?
    что в нексте реакт всегда обращается к своему серверу для SSR

    Как настроите, так и будет работать. Можно всегда, можно иногда, можно никогда.
    а у обычного реакта мы фетчем просто запросы шлем, когда все spa приложение очень быстро работает без лишних запросов на сервер

    На Next тоже самое можно. А Ваш SPA в SEO может? А рендерить одни страницы без SEO, вторые ПРЕрендерить с SEO, а остальные и так и так на лету может? А единовременно в рамках одного приложения? А еще и без дополнительных библиотек? А еще с конским комьюнити в рамках одного инструмента?

    Еще начинают активно внедряться Server Components, которые по некоторым отзывам - могут стать отраслевым стандартом.

    Если Вас интересует лишь SPA без SEO и дополнительных опций рендеринг, который будет рендериться лишь на клиенте, то оптимальнее будет выбрать лишь React + Роутер + WebPack в качестве сборщика.

    Vercel

    Vercel, оплата интеграции по стандартному тарифу, ну Вы знаете ;)
    Ответ написан
    1 комментарий
  • Почему TS не компилирует пути для JS?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    paths в tsconfig работают только визуально. Чтобы они работали физически - надо продублирвать их в алиасы того сборщика, который вы используете.
    paths - не первичны, а вторичны: они сделаны как отражение возможностей алиасов в сборщиков, а не как самостоятельная фича.
    Ответ написан
    1 комментарий