данные. Т.е принцип действия какой: использую useEffect чтобы применить axios, и с помощью useState перерисовываю. Т.е я в стейт передаю изначально пустой массив, а в функции useEffect вызываю setState, чтобы перерисовалось. Но как мне типизировать то, что мне приходит из локального сервера? Ошибка высвечивается: Аргумент типа "never[]" нельзя назначить параметру типа "cardType | (() => cardType)". Я не пойму как мне типизировать то, что приходит.
// react
import {useState, useEffect} from 'react'
import axios from 'axios'
// components
import Header from "../Components/Header/Header"
import Catalog from "../Components/Catalog/Catalog"
import Footer from "../Components/Footer/Footer"
type cardProps = {
id: number
name:string
price:number
desc:string
img:string
saler:string
}
type cardType = {
card:cardProps
}
const Home:React.FC = () => {
const [card, setCard] = useState<cardType>([])
useEffect(() => {
const fetchData = async () => {
const response = await axios.get('http://localhost:1488/parfums')
setCard(response.data)
}
fetchData()
}, [])
return <div>
<Header />
<Catalog card={card}/>
<Footer />
</div>
}
export default Home
За топорное описание проблемы прошу прощение
Типизация конечно
ну и вопросы задают нынче
get<{data: Cartatype[]}>
const response: тип или response.data as тип
Достижение “Межгалактическое бинго”. Пристопори коней и займись разбором базы и практик, у тебя явно неостановимый галоп. Основное: 1) useEffect не для запросов, если дошел до запросов, - лучше притормози, а то навернешь за обе щеки 2) Типы пишутся CamelCase 3) export default мусор 4) FC мусор 5) Ставь prettier 6) Ставь eslint (+eslint-kit) 7) Регистр просто вешайся (чек https://t.me/this_is_your_channel/49) 8) const [list, setList] = useState<Kek[]>([]); 9) Типы данных отделяют от UI 10) 1488 даже затирать не стал? Стойкость духа! 11) axios напрямую не дергают, ну хотя бы axios.create
свг - спрайты Отель - триваго
А есть ли смысл ставить prettier если eslint-kit юзаешь?
Если не юзать useEffect для запросов, то где грузить данные? Я в свое время гуглил эту тему, везде разное пишут, но в целом не нашел каких-то аргументов против useEffect
prettier как общепринятый в JS код стайл, еслінт как статичечкий анализатор
Там преттир просто сразу ставится и интеграция в 1 строку
С китом и притер ставится
1. у тебя csr, маленькая страница, на странице тупо один запрос куда еще воткнуть фетч, если не в useEffect? 2. типы пишутся как договоришься с командой, но тут согласен 3. эм, а страницы в nextjs как правильно экспортировать? 4. почему он не deprecated тогда? 5. + 6. + 7. пусть называет файлы как хочет или как в команде договорятся 8. + 9. опять же, зачем это делать, если у него компонент на ~16 строк? 10. 11. если на сайте 1 страница не нужно допольнительно аксиос конфигурировать, зачем создавать инстанс аксиоса? чтобы был?
11 аксиос не нужен вообще
страницы в некст с дефолтным экспортом это исключение) он о твоём коде говорит
Не говори так
11 аксиос не нужен вообще
я имею ввиду о коде котором пишет разраб, а не фреймворковые договорённости, которым ты просто должен следовать, раз его используешь
1. В СТМ 2. Зачем писал? 3. Ну да, это исключение, к чему это? 4. Кем? Это валидный тип, но мусор в прикладном коде 7. Какая команда? Чел учится, пусть прививает правильные практики. 9. Аргумент от “ну и пох”. Будет в 25 и можно выносить? 11. А если так а если сяк, отоно как может быть! Подход свой нужен! В целом, ты вообще это к чему? В Индии день оправданий жертв инженерной культуры? “Ситуация может быть разной” - можем просто сесть и замолчать, всё же разное, так какой смысл?
АХАХАХАХХАХА КОНЕЦ УБИЛ
FC уже норм, по идее, потому что оттуда удалили children. Из кейсов, наверное, только под дженерики в пропсах не подходит, а в остальном разницы, кажется, нет Толку не особо много, но прям мусором уже, наверное, можно не называть
1.Я кстати тоже про первое хотел узнать, но побоялся вызвать бурю негодования остальных. Я не знаю как еще пользоваться фетчом как ни через Effect. А так я понимаю, что useEffect хук намного большей универсальности. 2.С типами постоянно косячу. 4 дня на тайпскрипте пишу. Принцип понимаю, но очень сложно даётся. Все время есть желание психануть и обратно всё в jsx переписать. ... А где остальные достижения посмотреть ?
Эффект - это хук для синхронизации, а не для сайдов
Проблема в мышлении и практиках. “Мусор” я не столько в негативе, сколько в свойстве. Убрал, ничего качественно не поменялось, но стало чище
Качественно поменялось только то, что возвращаемый тип перестал быть типизированным В целом стреляет при применении, но для библиотеки может быть критичным Можно и самому написать, конечно, но букв больше
так тип автовыведится все равно)
> возвращаемый тип перестал быть типизированным Наоборот, кста, он стал по-настоящему типизированным. Для FC это пофиг, там раз в сто лет что-то шаблонное проскочит и как угодно быстро увидишь, а вот для обычных уже другой разговор.
Да не, если в рамках одного приложения компонент и объявляется, и применяется, то тут как и с возвращаемым значением функции - можно не писать и ловить ошибки в применениях, а не на стадии объявления Я говорил о кейсе, когда ты описываешь код в либе, который юзает кто-то снаружи. Тут объявляя явный тип ты гарантируешь, что не будет ситуации, когда твой контракт изменился случайно автовыводом и ты этого не заметил. В случае с типом компонента - гарантируешь, что не напишешь кривой возврат из рендера Но в целом кейс не очень удачный все равно, потому что даже если ты либу пишешь, у тебя будут тесты/сторибук/что угодно и упустить такое не получится Так что я согласен, что можно не описывать возвращаемый тип, а значит использовать FC смысла нет Плюс я бывает использую дженерики в пропсах, так что при использовании FC пришлось бы писать двумя разными синтаксисами одно и то же в разных ситуациях
любят же советы раздавать кто не шарит, а остальные еще и верят)
А можешь кста по подробнее, а то я постоянно его слушаю. Что не так там?
он еще не придумал, хотел бы, написал
Только в реакт чате за базу можно словить трех клоунов и хейтерское сообщение
Диор их по приколу ставит везде и всегда))
Тут выходцам Минина неймётся
https://react.dev/reference/react/useEffect#fetching-data-with-effects
Note that if you use a framework, using your framework’s data fetching mechanism will be a lot more efficient than writing Effects manually.
ога, там же говнари в фейсбуке реакт придумали, не то что тут знатоки в чатике
А ещё я видел в документации, как из компонента напрямую в дб обращаться, ну, что я могу сказать, идите **** с таким кодом
Да. Фейсбук это огромный продукт
реакт - это библиотека для рендера. И в доке нужно писать то, что касается рендера они просто показали, что чисто теоретически такое делать можно, но никто не заявлял, что это правильное архитектурное решение
эх, вот только странно что "просто библиотека" для рендера патчит глобалы
самое смешное что они даже не аргументировали никак
а какие глобалы реакт патчит?
фетч, консол лог
а как он фетч патчит? есть где почитать?
https://github.com/facebook/react/issues/25573
gaearon since people are doubting this comment, I'll reiterate we will make not do patching by default in React itself (but frameworks would be welcome to make or not make this choice). пока не патчит и, кажется, не собирается, так что, вроде, все ок
Обсуждают сегодня