• Почему объект выдает ошибку Type 'any' is not assignable to type 'never'. при попытке добавить значение свойству?

    @MishaXXL Автор вопроса
    Alexandroppolus, formDataэто просто название, я не имел в виду объект FormData)

    А как правильней работать?
    У нас есть реф на форму
    const form = useRef<HTMLFormElement | null>(null)

    Есть сама форма
    return(
        <>
            <form ref={form} className={style.form} onSubmit={handleSubmit}>
                <input name="name" type="text" />
                <input name="surename" type="text" />
                <input type="submit" value="Add user" />
            </form>
        </>
    )


    И в обработке формы хотим получить наши поля
    const {name, surename} = formFields
    Но без типизации он нам не позволяет их получить
    И пришел к решению
    const {name, surename} = formFields as unknown as Form


    function handleSubmit(event: FormEvent) {
        event.preventDefault()
        const formFields = form.current
        if(!formData) return
        const {name, surename} = formFields 
        console.log(name.value, surename.value)
    }


    Подскажи, как правильней это сделать?

    Потому что пока мое лучше решение в плане деструктуризации это привести все к такой форме через as unknown as Form
    interface Form {
        name: HTMLInputElement,
        surename: HTMLInputElement,
    }
    
    const {name, surename} = formData as unknown as Form


    Возможно как-то динамический получить имена всех полей из нашего рефа?
    const form = useRef<HTMLFormElement | null>(null)

    Что бы не описывать руками интерфейс
    interface Form {
        name: HTMLInputElement,
        surename: HTMLInputElement,
    }
    Написано
  • Почему объект выдает ошибку Type 'any' is not assignable to type 'never'. при попытке добавить значение свойству?

    @MishaXXL Автор вопроса
    Alexandroppolus, подскажи пожалуйста, если использовать такую конструкцию
    Как можно добавить типизацию в const {name, surename} = formData?
    Где после предполагается работа с
    console.log(name.value, surename.value)
    Property 'value' does not exist on type 'string'. Did you mean 'valueOf'?

    Как я понял, мне нужно как-то TS привести к тому, что у меня там не строки, а HTMLInputElement или сделать предварительную проверку, но я пока не смог найти на что

    const {name, surename}: {name: HTMLInputElement, surename: HTMLInputElement} = formData

    Здесь он тоже ругается
    Property 'surename' is missing in type 'HTMLFormElement' but required in type '{ name: HTMLInputElement; surename: HTMLInputElement; }'.


    const form = useRef<HTMLFormElement | null>(null)
    
    function handleSubmit(event: FormEvent) {
        event.preventDefault()
        const formData = form.current
        if(!formData) return
        const {name, surename} = formData
        console.log(name.value, surename.value)
    }
    
    return(
        <>
            <form ref={form} className={style.form} onSubmit={handleSubmit}>
                <input name="name" type="text" />
                <input name="surename" type="text" />
                <input type="submit" value="Add user" />
            </form>
        </>
    )


    Получилось только так
    const {name, surename} = formData as any
    Но есть подозрения, что это не хорошо )

    Есть еще такая версия
    На сколько это нормально использовать as unknown as Form?
    interface Form {
        name: HTMLInputElement,
        surename: HTMLInputElement,
    }
    
    const {name, surename} = formData as unknown as Form
    Написано
  • Откуда React берет объект для инициализации хуков без пути к нему?

    @MishaXXL Автор вопроса
    Михаил Р., я там и искал, там же файл ReactHooks.js и находится
    Из отдельных файлов есть только memoи createRef, но куда они экспортируются и где находится сам useRefтот же, не смог найти
    Подскажи, по какой логике они разбросаны и как найти те же useStateи useCallback?
    Написано
  • Откуда React берет объект для инициализации хуков без пути к нему?

    @MishaXXL Автор вопроса
    Реализация хуков находится в исходном коде реакта.

    Подскажи, какими путями выйти на этот файл? )
    Данный код я брал из файла, отсюда reactимпортирует хуки
    react/packages/react/src/ReactHooks.js
    А вот файл с их реализацией не смог найти, т.к. импорты закончились
    Написано
  • Почему объект выдает ошибку Type 'any' is not assignable to type 'never'. при попытке добавить значение свойству?

    @MishaXXL Автор вопроса
    Aetae, подскажи пожалуйста, как называется тема в TS про этот случай?
    data[input] - string или boolean(string & boolean = never), а присваивать never ничего нельзя, даже any

    Когда читал про never, думал он служит только для того, чтобы описать функцию, которая вернет ошибку throw new Error() и по этому она neverбудет
    Здесь тоже получается never, но в описании про него не нашел или не заметил подобный случай его использования
    И почему string | boolean это never?
    Вроде есть четкий список типов на выбор и типизацию мы явно указали
    Написано
  • По какому принципу работает набор индексов в одной таблице?

    @MishaXXL Автор вопроса
    Melkij, я про то, что есть ли смысл создания 4 таких индексов, чтобы БД делала поиск по подходящему или они так не работают?
    Написано
  • По какому принципу работает набор индексов в одной таблице?

    @MishaXXL Автор вопроса
    Melkij, а в плане создание 2 и более индексов, в таком подходе есть смысл или обычно создается один усредненно универсальный индекс?
    Например, создать 3 отдельных индекса на name, brand, price и 4-ый, где будут все три сразу name, brand, price
    Написано
  • По какому принципу работает набор индексов в одной таблице?

    @MishaXXL Автор вопроса
    Everything_is_bad, там было 2 страницы про индексы )
    При создании индекса, что они создают для таблицы, что помогает после в ней делать ускоренную выборку?
    И при выборке БД сама подберет нужную индексацию из тех, что мы создали под нее учитывая по каким полям мы поставили условие?
    Написано
  • По какому принципу работает набор индексов в одной таблице?

    @MishaXXL Автор вопроса
    Индекс создает свою мини таблицу или что-то подобное, что у себя отсортировало все записи на ссылки к ним?
    Т.е. при создании очередного индекса, при выборке будет проанализировано условие WHEREи если там только поле name="user", то он будет производит поиск с учетом созданного индекса, где мы реализовали
    CREATE INDEX name_idx ON products (name), а если у нас в условиях поиск по (name, brand, price), то уже будет использовать
    CREATE INDEX prod_idx ON products (name, brand, price)
    , верно?
    Написано
  • По какому принципу работает набор индексов в одной таблице?

    @MishaXXL Автор вопроса
    В книге как раз и приводился пример с order by, что представьте его )
    Написано
  • От чего зависит количество единоверменных запросов, которые может обрабатывать БД?

    @MishaXXL Автор вопроса
    Какое количество максимальных соединений обычно на БД в маркетплейсах, что они отрабатывают быстро тысячи запросов в секунду?
    Написано
  • От чего зависит количество единоверменных запросов, которые может обрабатывать БД?

    @MishaXXL Автор вопроса
    Если брать маркетплейс у которого сотни миллионов записей и каждую секунду тысячи больших запросов на выборку товаров с фильтрами
    Вот пришла у нас тысяча запросов на выборки данных из сотни миллионов записей
    Это тысяча запросов в БД будут выполнятся одновременно или будет очередь?
    Просто при такой логике, если каждую секунду приходят тысячи запросов на выборки данных, то как у нас БД не впадает в длительные задержки и отрабатывает быстро?
    Написано
  • От чего зависит количество единоверменных запросов, которые может обрабатывать БД?

    @MishaXXL Автор вопроса
    Если взять в пример озон, где сотни миллионов записей
    Одновременной делают запросы тысячи людей
    Эти же запросы не становятся в очередь или как происходит обработка запросов к БД от нашего сервера, если нам одновременно пришло 1000 запросов и та каждую секунду?
    Написано
  • Как настроить правила gitignore от обратного?

    @MishaXXL Автор вопроса
    historydev, создать фундамент приложения со всеми папками, а после в эти папки свои репозитории склонировать
    Написано
  • Как добавить eslint в vite Could not find a declaration file?

    @MishaXXL Автор вопроса
    Нужен другую версию пакета линтера ставить или как решить ситуацию?
    Написано
  • Как добавить eslint в vite Could not find a declaration file?

    @MishaXXL Автор вопроса
    WbICHA, линтер разве не через сборщик контролируется?
    Или как его в проекту с Vite подтянуть?
    Написано
  • На каком этапе React очищает память от memo?

    @MishaXXL Автор вопроса
    Спасибо!
    Подскажи пожалуйста, а с useRef как все происходит, когда мы туда передаем DOM элемент?
    При ререндере он берет из кэша рефа этот элемент и вставляет, а не создает новый элемент и снова присваивается useRef?
    В плане, что у нас тогда же еще не только к примеру input сохраняется и его значение
    Как этот элемент с его значением живут между ререндерами при смене стейта?
    Написано
  • Как сгруппировать запрос по колонке с булевым значением?

    @MishaXXL Автор вопроса
    Rsa97, я хочу получить результат, где сперва идут сделанные todos, а после не сделанные (true/false)
    Так же сделанные должны быть упорядоченные по id или user_id

    Т.е.
    [
    completed - true, user_id - 1, id: 5
    completed - true, user_id - 1, id: 7
    completed - true, user_id - 1, id: 24
    completed - true, user_id - 2, id: 8
    completed - true, user_id - 4, id: 12
    
    completed - false, user_id - 1, id: 13
    completed - false, user_id - 1, id: 15
    completed - true, user_id - 4, id: 27
    ]
    Написано
  • Как сгруппировать запрос по колонке с булевым значением?

    @MishaXXL Автор вопроса
    Подскажите пожалуйста, из-за чего ошибка, у меня при запросе
    SELECT * from todos GROUP BY user_id;

    ERROR:  column "todos.id" must appear in the GROUP BY clause or be used in an aggregate function
    LINE 1: SELECT * from todos GROUP BY user_id;


    При этом запрос отрабатывает нормально
    SELECT * from todos GROUP BY id;

    Так же и ваш запрос не срабатывает
    SELECT * from todos GROUP BY user_id, completed;
    ERROR:  column "todos.id" must appear in the GROUP BY clause or be used in an aggregate function
    LINE 1: SELECT * from todos GROUP BY user_id, completed;


    Мне по итогу нужен результат
    [
    completed - true, user_id - 1, id: 5
    completed - true, user_id - 1, id: 7
    completed - true, user_id - 1, id: 24
    completed - true, user_id - 2, id: 8
    completed - true, user_id - 4, id: 12
    
    completed - false, user_id - 1, id: 13
    completed - false, user_id - 1, id: 15
    completed - true, user_id - 4, id: 27
    ]
    Написано
  • Почему не происходит ререндер мемоизированного компонента при наличии в нем переменной с данными без useMemo?

    @MishaXXL Автор вопроса
    szQocks, я почитал, но не до конца понял
    т.е. когда функция возвращает примитив, который не меняется, то эта переменная работает, как useMemoпо умолчанию, т.к. значение не изменилось, а если мы будем возвращать объект, то тогда уже нужно оборачивать в useMemo?
    Написано