Добро пожаловать, или посторонним вход воспрещён (часть 2)#13
Conversation
|
Ваш пулреквест опубликован. Посмотреть можно здесь |
| // TODO: Доработать! | ||
| try { | ||
| dispatch(postReviewAction({ | ||
| offerId: offerId, |
There was a problem hiding this comment.
Такие штуки можно просто писать как { offerId, ...}, оно прокинется в объект
|
|
||
| useEffect(() => { | ||
| dispatch(fetchCommentsOfferAction(offerId)); | ||
| }, [dispatch, offerId]); |
There was a problem hiding this comment.
Диспатч в зависимости можно не добавлять, это и так стабильная ссылка
There was a problem hiding this comment.
если его убрать то получаем...
React Hook useEffect has a missing dependency: 'dispatch'. Either include it or remove the dependency array.
| }, [dispatch, offerId]); | ||
|
|
||
| if (!checkOfferId(offers, offerId)) { | ||
| if (!selectedOffer) { |
There was a problem hiding this comment.
Условный рендеринг добавлять в конец всего перед основным рендером, так как не должно быть такого, что в какой-то момент у тебя рендерится jsx элемент, а в какой-то инициализация каких-то сущностей происходит
| const offer: OfferType = OFFER; | ||
|
|
||
| const dispatch = useAppDispatch(); | ||
| const offerId: string = useParams().offerId || ''; |
There was a problem hiding this comment.
Вот так лучше не делать. useParams это хук, поэтому вызови и вытащи то, что нужно через деструктуризацию
const { offerId } = useParams()
There was a problem hiding this comment.
как оптимизировать?
const { offerId } = useParams() as { offerId: string };
| const {data} = await api.get<OfferType>(`${APIRoute.Offer}/${id}`); | ||
| dispatch(selectOffer(data)); | ||
| } catch { | ||
| dispatch(unselectOffer()); |
There was a problem hiding this comment.
Лучше, конечно, не просто что-то сбрасывать при ошибки, а как-то обрабатывать ошибку. Но это просто на будущее подумай
There was a problem hiding this comment.
после устранения замечаний хочу заняться пробрасыванием ошибок
| .addCase(selectOffer, (state, action) => { | ||
| state.selectedOffer = action.payload; | ||
| }) | ||
| .addCase(unselectOffer, (state) => { |
There was a problem hiding this comment.
В принципе, в будущем для простоты и для уменьшения кодовой базы, можно не делать такие сбросы, а если тебе надо сбросить, то просто в момент вызова будешь передавать пустые какие-то значения
| @@ -0,0 +1,11 @@ | |||
| export type CommentElementType = { | |||
| 'id': string; | |||
| 'user': { | ||
| 'name': string; |
There was a problem hiding this comment.
Такую вложенность лучше не делать, вынеси user как отдельный тип и прокинь сюда
| title: string; | ||
| type: string; | ||
| price: number; | ||
| city: { |
There was a problem hiding this comment.
Тут такая же история с городом и location, подобную вложенность выноси в отдельный тип
| @@ -0,0 +1,34 @@ | |||
| // Create Types | |||
|
|
|||
| export type OfferType = { | |||
There was a problem hiding this comment.
Это по большей части вкусовщина, но если нет необходимости что-то наследовать, то лучше делай как interface, вместо type. Можно для себя выработать правило, что если interface, это простая типизация, если type - это либо константы, либо с наследованием от кого-то, просто для читабельности
There was a problem hiding this comment.
ок, чуть позднее буду перебирать типы
|
Ваш пулреквест опубликован. Посмотреть можно здесь |
| const dispatch = useAppDispatch(); | ||
| const offerId: string = useParams().offerId || ''; | ||
| // TODO: Как оптимизировать offerId | ||
| const { offerId } = useParams() as { offerId: string }; |
There was a problem hiding this comment.
Здесь ты можешь использовать дженерик как useParams<{ offerId: string }>()
🎓 Добро пожаловать, или посторонним вход воспрещён (часть 2)