- Π‘ΡΠ²ΠΎΡΠ΅Π½ΠΈΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΡΠΉ
goit-react-woolf-hw-01-components
. - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π²ΡΡΡ
Π·Π°Π²Π΄Π°Π½Ρ ΡΠ΅Π½Π΄Π΅ΡΡΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΡΠΉ ΡΡΠΎΡΡΠ½ΡΡ, Π²ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Ρ ΡΠΏΡΠ»ΡΠ½ΠΎΠ³ΠΎ
ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° β ΠΊΠΎΡΠ΅Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°
<App>
. - ΠΡΠΈ Π·Π΄Π°ΡΡ Π΄ΠΎΠΌΠ°ΡΠ½ΡΠΎΡ ΡΠΎΠ±ΠΎΡΠΈ Ρ ΠΏΠΎΡΠΈΠ»Π°Π½Π½Ρ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΡΠΉ Π· Π²ΠΈΡ ΡΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΡ.
- Π ΡΠ°ΠΏΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΡΡ Ρ ΠΏΠΎΡΠΈΠ»Π°Π½Π½Ρ Π½Π° ΠΆΠΈΠ²Ρ ΡΡΠΎΡΡΠ½ΠΊΡ Π½Π°
GitHub pages
. - ΠΡΠ΄ ΡΠ°Ρ Π²ΡΠ΄Π²ΡΠ΄ΡΠ²Π°Π½Π½Ρ ΡΠΎΠ±ΠΎΡΠΎΡ ΡΡΠΎΡΡΠ½ΠΊΠΈ (GitHub pages) Π·Π°Π²Π΄Π°Π½Π½Ρ, Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π²ΡΠ΄ΡΡΡΠ½Ρ ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ ΡΠ° ΠΏΠΎΠΏΠ΅ΡΠ΅Π΄ΠΆΠ΅Π½Π½Ρ.
- ΠΠ»Ρ ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Ρ ΠΎΠΊΡΠ΅ΠΌΠ° ΠΏΠ°ΠΏΠΊΠ° Π· ΡΠ°ΠΉΠ»ΠΎΠΌ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ ΡΡΠΈΠ»ΡΠ².
- ΠΡΠ΅, ΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΡΡΠΊΡΡ Ρ Π²ΠΈΠ³Π»ΡΠ΄Ρ ΠΏΡΠΎΠΏΡΡΠ², ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡΡ ΠΉΠΎΠΌΡ ΠΏΡΠ΄ ΡΠ°Ρ Π²ΠΈΠΊΠ»ΠΈΠΊΡ.
- ΠΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡΠ² Π·ΡΠΎΠ·ΡΠΌΡΠ»Ρ ΡΠ° ΠΎΠΏΠΈΡΠΎΠ²Ρ.
- JS-ΠΊΠΎΠ΄ ΡΠΈΡΡΠΈΠΉ Ρ Π·ΡΠΎΠ·ΡΠΌΡΠ»ΠΈΠΉ, Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΡΡΡ
Prettier
. - Π‘ΡΠΈΠ»ΡΠ·Π°ΡΡΡ Π²ΠΈΠΊΠΎΠ½Π°Π½Π°
CSS-ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ
Π°Π±ΠΎStyled Components
, ΡΠΎΠΌΡ ΠΊΠ»Π°ΡΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΡΡΡΠΎΠΌΡ DOM Π²ΡΠ΄ΡΡΠ·Π½ΡΡΠΈΠΌΡΡΡΡΡ Π²ΡΠ΄ ΠΏΡΠΈΠΊΠ»Π°Π΄ΡΠ². - ΠΠΎΡΡΠ°ΡΠ½ΡΠΎ Π±Π°Π·ΠΎΠ²ΠΎΡ ΡΡΠΈΠ»ΡΠ·Π°ΡΡΡ Π·Π°ΡΡΠΎΡΡΠ½ΠΊΡ, Π½Π°ΡΠ°ΠΌΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ½ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈ, Π° Π²ΠΆΠ΅ ΠΏΠΎΡΡΠΌ Π±ΡΡΠΈ Π³Π°ΡΠ½ΠΈΠΌ. ΠΡΠΈΠ΄ΡΠ»ΡΠΉ 20% ΡΠ°ΡΡ Π½Π° CSS Ρ 80% Π½Π° JS.
ΠΠ΅ΠΎΠ±Ρ
ΡΠ΄Π½ΠΎ ΡΡΠ²ΠΎΡΠΈΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ <Profile>
, Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ ΡΠΊΠΎΠ³ΠΎ ΠΌΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±
Π²ΡΠ΄ΠΎΠ±ΡΠ°ΠΆΠ°ΡΠΈ ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΡ ΠΏΡΠΎ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ° ΡΠΎΡΡΠ°Π»ΡΠ½ΠΎΡ ΠΌΠ΅ΡΠ΅ΠΆΡ. ΠΠ°Π½Ρ ΠΏΡΠΎ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ°
Π»Π΅ΠΆΠ°ΡΡ Ρ ΡΠ°ΠΉΠ»Ρ user.json.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ ΠΏΡΠΈΠΉΠΌΠ°ΡΠΈ ΠΊΡΠ»ΡΠΊΠ° ΠΏΡΠΎΠΏΡΡΠ² Π· ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΡΡ ΠΏΡΠΎ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ°:
username
β ΡΠΌ'Ρ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ°tag
β ΡΠ΅Π³ Π² ΡΠΎΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠ΅ΠΆΡ Π±Π΅Π·@
location
β ΠΌΡΡΡΠΎ Ρ ΠΊΡΠ°ΡΠ½Π°avatar
β ΠΏΠΎΡΠΈΠ»Π°Π½Π½Ρ Π½Π° Π·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½Ρstats
β ΠΎΠ±'ΡΠΊΡ Π· ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΡΡ ΠΏΡΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ ΡΡΠ²ΠΎΡΡΠ²Π°ΡΠΈ DOM Π΅Π»Π΅ΠΌΠ΅Π½Ρ Π½Π°ΡΡΡΠΏΠ½ΠΎΡ ΡΡΡΡΠΊΡΡΡΠΈ.
<div class="profile">
<div class="description">
<img
src="https://cdn-icons-png.flaticon.com/512/1077/1077012.png"
alt="User avatar"
class="avatar"
/>
<p class="name">Petra Marica</p>
<p class="tag">@pmarica</p>
<p class="location">Salvador, Brasil</p>
</div>
<ul class="stats">
<li>
<span class="label">Followers</span>
<span class="quantity">1000</span>
</li>
<li>
<span class="label">Views</span>
<span class="quantity">2000</span>
</li>
<li>
<span class="label">Likes</span>
<span class="quantity">3000</span>
</li>
</ul>
</div>
import user from 'ΠΏΡΡΡ/ΠΊ/user.json;
<Profile
username={user.username}
tag={user.tag}
location={user.location}
avatar={user.avatar}
stats={user.stats}
/>
Π‘ΡΠ²ΠΎΡΠΈΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ <Statistics>
, ΡΠΊΠΈΠΉ Π±ΠΈ Π²ΡΠ΄ΠΎΠ±ΡΠ°ΠΆΠ°Π² ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π· ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΈΡ
ΠΏΡΠΎΠΏΡΡΠ². ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄, Π·Π°Π²Π°Π½ΡΠ°ΠΆΠ΅Π½Π½Ρ Ρ Ρ
ΠΌΠ°ΡΡ Π·Π° ΡΠΈΠΏΠΎΠΌ ΡΠ°ΠΉΠ»ΡΠ², Π²ΡΠ΄Π²ΡΠ΄ΡΠ²Π°Π½Π½Ρ
Π²Π΅Π±-ΡΡΠΎΡΡΠ½ΠΊΠΈ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ°ΠΌΠΈ ΡΡΠ·Π½ΠΈΡ
ΠΊΡΠ°ΡΠ½, ΡΡΠ½Π°Π½ΡΠΎΠ²Ρ Π²ΠΈΡΡΠ°ΡΠΈ ΡΠΎΡΠΎ. ΠΠ°Π½Ρ ΠΏΡΠΎ
ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π»Π΅ΠΆΠ°ΡΡ Ρ ΡΠ°ΠΉΠ»Ρ data.json.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ ΠΏΡΠΈΠΉΠΌΠ°ΡΠΈ Π΄Π²Π° ΠΏΡΠΎΠΏΠΈ title
Ρ stats
, Π² ΡΠΊΠΈΡ
Π²ΠΊΠ°Π·ΡΡΡΡΡΡ
Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ° ΠΎΠ±'ΡΠΊΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ.
title
β Π½Π΅ ΠΎΠ±ΠΎΠ²'ΡΠ·ΠΊΠΎΠ²ΠΈΠΉ, Ρ ΡΠΊΡΠΎ Π²ΡΠ½ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΈΠΉ, Π½Π΅ ΠΏΠΎΠ²ΠΈΠ½Π½Π° ΡΠ΅Π½Π΄Π΅ΡΠΈΡΠΈΡΡ ΡΠΎΠ·ΠΌΡΡΠΊΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°<h2>
.stats
β ΠΌΠ°ΡΠΈΠ² ΠΎΠ±'ΡΠΊΡΡΠ², ΡΠΎ ΠΌΡΡΡΡΡΡ ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΡ ΠΏΡΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ. ΠΠΎΠΆΠ΅ ΠΌΠ°ΡΠΈ Π΄ΠΎΠ²ΡΠ»ΡΠ½Ρ ΠΊΡΠ»ΡΠΊΡΡΡΡ Π΅Π»Π΅ΠΌΠ΅Π½ΡΡΠ².- ΠΠΎΠ»ΡΡ ΡΠΎΠ½Ρ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ Π² ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½Ρ ΠΌΠΎΠΆΠ½Π° ΠΏΡΠΎΠΏΡΡΡΠΈΡΠΈ Π°Π±ΠΎ ΡΡΠ²ΠΎΡΠΈΡΠΈ ΡΡΠ½ΠΊΡΡΡ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΡΡ Π²ΠΈΠΏΠ°Π΄ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΡΠΎΡΡ.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ ΡΡΠ²ΠΎΡΡΠ²Π°ΡΠΈ DOM Π΅Π»Π΅ΠΌΠ΅Π½Ρ Π½Π°ΡΡΡΠΏΠ½ΠΎΡ ΡΡΡΡΠΊΡΡΡΠΈ.
<section class="statistics">
<h2 class="title">Upload stats</h2>
<ul class="stat-list">
<li class="item">
<span class="label">.docx</span>
<span class="percentage">4%</span>
</li>
<li class="item">
<span class="label">.mp3</span>
<span class="percentage">14%</span>
</li>
<li class="item">
<span class="label">.pdf</span>
<span class="percentage">41%</span>
</li>
<li class="item">
<span class="label">.mp4</span>
<span class="percentage">12%</span>
</li>
</ul>
</section>
import data from '/ΠΏΡΡΡ/ΠΊ/data.json';
<Statistics title="Upload stats" stats={data} />;
<Statistics stats={data} />;
ΠΠ΅ΠΎΠ±Ρ
ΡΠ΄Π½ΠΎ ΡΡΠ²ΠΎΡΠΈΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ <FriendList>
, Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ ΡΠΊΠΎΠ³ΠΎ ΠΌΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±
Π²ΡΠ΄ΠΎΠ±ΡΠ°ΠΆΠ°ΡΠΈ ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΡ ΠΏΡΠΎ Π΄ΡΡΠ·ΡΠ² ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ°. ΠΠ½ΡΠΎΡΠΌΠ°ΡΡΡ ΠΏΡΠΎ Π΄ΡΡΠ·ΡΠ²
Π·Π±Π΅ΡΡΠ³Π°ΡΡΡΡΡ Ρ ΡΠ°ΠΉΠ»Ρ friends.json.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ ΠΏΡΠΈΠΉΠΌΠ°ΡΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠΏ friends
β ΠΌΠ°ΡΠΈΠ² ΠΎΠ±'ΡΠΊΡΡΠ² Π΄ΡΡΠ·ΡΠ².
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ ΡΡΠ²ΠΎΡΡΠ²Π°ΡΠΈ DOM Π½Π°ΡΡΡΠΏΠ½ΠΎΡ ΡΡΡΡΠΊΡΡΡΠΈ.
<ul class="friend-list">
<!-- ΠΠΎΠ²ΡΠ»ΡΠ½Π° ΠΊΡΠ»-ΡΡΡ FriendListItem -->
</ul>
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ ΠΏΡΠΈΠΉΠΌΠ°ΡΠΈ ΠΊΡΠ»ΡΠΊΠ° ΠΏΡΠΎΠΏΡΠ²:
avatar
β ΠΏΠΎΡΠΈΠ»Π°Π½Π½Ρ Π½Π° Π°Π²Π°ΡΠ°Ρname
β ΡΠΌ'Ρ Π΄ΡΡΠ³Π°isOnline
β Π±ΡΠ»Ρ, ΡΠΎ ΡΠΈΠ³Π½Π°Π»ΡΠ·ΡΡ ΠΏΡΠΎ ΡΡΠ°Π½ Π΄ΡΡΠ³Π°: Π² ΠΌΠ΅ΡΠ΅ΠΆΡ Π°Π±ΠΎ Π½Ρ.
ΠΠ°Π»Π΅ΠΆΠ½ΠΎ Π²ΡΠ΄ ΠΏΡΠΎΠΏΠ° isOnline
, ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ Π·ΠΌΡΠ½ΡΠ²Π°ΡΠΈΡΡ ΠΊΠΎΠ»ΡΡ ΡΠΎΠ½Ρ span.status
. Π¦Π΅
ΠΌΠΎΠΆΠ½Π° Π·ΡΠΎΠ±ΠΈΡΠΈ Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡ ΡΡΠ·Π½ΠΈΡ
CSS-ΠΊΠ»Π°ΡΡΠ² Π°Π±ΠΎ Styled Components.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ ΡΡΠ²ΠΎΡΡΠ²Π°ΡΠΈ DOM Π½Π°ΡΡΡΠΏΠ½ΠΎΡ ΡΡΡΡΠΊΡΡΡΠΈ.
<li class="item">
<span class="status"></span>
<img class="avatar" src="" alt="User avatar" width="48" />
<p class="name"></p>
</li>
import friends from 'ΠΏΡΡΡ/ΠΊ/friends.json';
<FriendList friends={friends} />,
ΠΠ΅ΠΎΠ±Ρ ΡΠ΄Π½ΠΎ ΡΡΠ²ΠΎΡΠΈΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΡΡΠΎΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΡΠΉ Π² ΠΎΡΠΎΠ±ΠΈΡΡΠΎΠΌΡ ΠΊΠ°Π±ΡΠ½Π΅ΡΡ ΡΠ½ΡΠ΅ΡΠ½Π΅Ρ-Π±Π°Π½ΠΊΡ.
ΠΠ°Π½Ρ Π΄Π»Ρ ΡΠΏΠΈΡΠΊΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Ρ ΡΠΎΡΠΌΠ°ΡΡ JSON Ρ ΡΠ°ΠΉΠ»Ρ transactions.json. Π¦Π΅ ΠΌΠ°ΡΠΈΠ² ΠΎΠ±'ΡΠΊΡΡΠ², ΠΊΠΎΠΆΠ΅Π½ ΠΎΠ±'ΡΠΊΡ ΠΎΠΏΠΈΡΡΡ ΠΎΠ΄Π½Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΡΡ Π· Π½Π°ΡΡΡΠΏΠ½ΠΈΠΌΠΈ Π²Π»Π°ΡΡΠΈΠ²ΠΎΡΡΡΠΌΠΈ:
id
β ΡΠ½ΡΠΊΠ°Π»ΡΠ½ΠΈΠΉ ΡΠ΄Π΅Π½ΡΠΈΡΡΠΊΠ°ΡΠΎΡ ΡΡΠ°Π½Π·Π°ΠΊΡΡΡtype
β ΡΠΈΠΏ ΡΡΠ°Π½Π·Π°ΠΊΡΡΡamount
- ΡΡΠΌΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΡΡcurrency
- ΡΠΈΠΏ Π²Π°Π»ΡΡΠΈ
ΠΠ΅ΠΎΠ±Ρ
ΡΠ΄Π½ΠΎ ΡΡΠ²ΠΎΡΠΈΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ <TransactionHistory>
, ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΉΠΌΠ°Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠΏ
items
β ΠΌΠ°ΡΠΈΠ² ΠΎΠ±'ΡΠΊΡΡΠ² ΡΡΠ°Π½Π·Π°ΠΊΡΡΠΉ Π· transactions.json
. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΡΠ²ΠΎΡΡΡ
ΡΠΎΠ·ΠΌΡΡΠΊΡ ΡΠ°Π±Π»ΠΈΡΡ. ΠΠΎΠΆΠ½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΡΡ β ΡΠ΅ ΡΡΠ΄ΠΎΠΊ ΡΠ°Π±Π»ΠΈΡΡ. Π£ ΠΏΡΠΈΠΊΠ»Π°Π΄Ρ Π½Π°Π²Π΅Π΄Π΅Π½Π°
ΡΠΎΠ·ΠΌΡΡΠΊΠ° Π΄Π²ΠΎΡ
ΡΡΠ°Π½Π·Π°ΠΊΡΡΠΉ.
<table class="transaction-history">
<thead>
<tr>
<th>Type</th>
<th>Amount</th>
<th>Currency</th>
</tr>
</thead>
<tbody>
<tr>
<td>Invoice</td>
<td>125</td>
<td>USD</td>
</tr>
<tr>
<td>Withdrawal</td>
<td>85</td>
<td>USD</td>
</tr>
</tbody>
</table>
import transactions from 'ΠΏΡΡΡ/ΠΊ/transactions.json';
<TransactionHistory items={transactions} />;