Closed AlexKuskov closed 4 years ago
<template>
<div id="app">
<weather-widget />
</div>
</template>
<template>
<weather-widget id="app" />
</template>
Просто. В домі не важливо як ти напишеш. а тут простіше буде
components: { WeatherWidget }
Коли люди пишуть на вью вони знають шо таке scoped. І взагалі то цей атрибут має бути у всіх стилях компонентів
props: {
msg: String
},
Для чого тобі це?
import Vue from 'vue';
import axios from 'axios';
І оце тобі для чого?
data() {
return {
city: 'Cherkasy',
countryCode: 'ua'
};
},
Якщо у data тобі не потрібен доступ до контексту, то краще отак
data: () => ({
city: 'Cherkasy',
countryCode: 'ua'
}),
id="city-to-search" Для чого тобі айдішка?
В компоненти стор імпортити не потрібно
import { store } from '../store';
Просто
this.$store
v-on:submit="getForecastData"
Можна просто @submit.prevent="getForecastData"
.prevent
використовується замість того щоб кожен раз писати
e.preventDefault();
Замість конкатенації юзай параметри
?appId=${key}&q=${this.city},${this.countryCode}
;`
const params = { appId: key, q: `${this.city},${this.countryCode} };
axios.get(url, { params });
.then(function
юзай стрілочні функціх для колбеків
$store.state.cityName
замість таких штук в домі юзай хелпер mapState (погугли що це таке)
Юзай скоречення v-bind:key
:key
<div class="loader" v-if="$store.state.isLoading"></div>
<div v-else>
Якщо тобі потрібно згрупувати елементи для якогось v-if, v-for, v-slot etc юзай тег template замість реальних елементів
<div class="loader" v-if="isLoading"></div>
<template v-else>
<div class="forecast-day block" v-for="day of days" :key="day">
<h3>{{ getDate(day[0].dt) }}</h3>
<ul class="hour-list">
<li v-for="hour of day" v-bind:key="hour">
<forecast-list-item :hourWeather="hour" />
</li>
</ul>
</div>
</div>
Думаю там не потрібен індекс в v-for і можна обійтись просто значеннями днів, годин. Вони і так унікальні, а вью робить атрибут key скоповим відносно кожного списку не забувай про семантику і те що для списків є ul,li
Для чого ти імпортиш вью і аксіос у всі компоненти? І для чого скрізь пропс msg?
var? використай щось краще
У тебе в стилях скрізь прописано lang="scss", але сасу там немає. Для чого воно?
ping-ping
Так-так, я бачу цю таску. Зараз уже доробляю її
Коли люди пишуть на вью вони знають шо таке scoped. І взагалі то цей атрибут має бути у всіх стилях компонентів
Я в App.vue не писав скоуп, тому що там був стиль для .block селектора, який використовувався в деяких компонентах, і я хотів помістити .block в одне місце щоб не повторяти його в кожному компоненті. Але якщо атрибут скоуп має бути у всіх стилях компонентів, то добре. Ось я виправив це https://github.com/AlexKuskov/homework-6-js/commit/7e5f24bfdbbaaed8fd08e48b87661ee71493791b
Просто. В домі не важливо як ти напишеш. а тут простіше буде
components: { WeatherWidget }
Виправив А що це за магія, що я можу писати назву компонента в домі і через PascalCase і через kebab-case? Це типу в специфікації вью так задумано?
Для чого ти імпортиш вью і аксіос у всі компоненти? І для чого скрізь пропс msg?
Я не помітив цього при рефакторингу кода. В мене IDE не підсвічує не використовані імпорти. Буду шукати якийсь плагін, для вс код, щоб більше не допускати цієї помилки
У тебе в стилях скрізь прописано lang="scss", але сасу там немає. Для чого воно?
Я встановив його випадково при установці проекта і забув видалити. Уже підправив
Ну все. Я завершив роботу Ось мої виправлення: https://github.com/AlexKuskov/homework-6-js/commits/master
<!-- Add "scoped" attribute to limit CSS to this component only -->
Ці коменти зайві. Всі і так знають для чого там атрибут scoped
computed: mapState({
cityName: state => state.cityName,
isHintDisplayed: state => state.isHintDisplayed,
isLoading: state => state.isLoading,
days: state => state.days
}),
Якщо назви співпадають і немає вкладених модулів, то можна просто
computed: mapState([
'cityName',
'isHintDisplayed',
'isLoading',
'days'
}),
Ну і якщо юзаєш хелпери, повинось в інших компонентах виклики мутацій та екшинів у хелпери
methods: {
...mapActions({
someActionAlias: ACTIONS.SOME_ACTION
}),
...mapMutations({
someMutationsAlias: MUTATIONS.SOME_MUTATION
}),
otherMethod() {
this.someMutationAlias(someDataIfNeeded);
this.someActionAlias(someDataIfNeeded);
}
}
А що це за магія, що я можу писати назву компонента в домі і через PascalCase і через kebab-case? Це типу в специфікації вью так задумано? Просто вью так вміє. В темплаті більш привичним зазвичай є кебаб кейс, а в джс паскаль кейс, от вони таке і зробили
Але якщо атрибут скоуп має бути у всіх стилях компонентів, то добре. В рутовому можна ще залишити стилі без скопу, але тільки глобальні (можна писати декілька тегів style для одного компонента, якщо що). Або ти ще можеш зробити папку styles, куди покласти стилі і заімпортити їх в main.js і ці стилі також будуть глобальні. Так доволі часто роблять і це ок
Все, виправив. Перевір, будь ласка, коли буде вільний час https://github.com/AlexKuskov/homework-6-js/commits/master
Repository: https://github.com/AlexKuskov/homework-6-js GitHub Pages: https://alexkuskov.github.io/homework-6-js/