Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Ρ ΡΠΊΠΎΠ²
These docs are old and wonβt be updated. Go to react.dev for the new React docs.
These new documentation pages teach modern React and include live examples:
Π₯ΡΠΊΠΈ β Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² React 16.8, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ React Π±Π΅Π· Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ².
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Ρ ΡΠΊΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π»ΠΎΠ³ΠΈΠΊΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Π ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΡΠΊΠ° ΡΡΡΠ΅ΠΊΡΠ° ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°ΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ Π½Π°Ρ Π΄ΡΡΠ³ Π² ΡΠ΅ΡΠΈ:
import React, { useState, useEffect } from 'react';
function FriendStatus(props) {
const [isOnline, setIsOnline] = useState(null); useEffect(() => { function handleStatusChange(status) { setIsOnline(status.isOnline); } ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange); return () => { ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange); }; });
if (isOnline === null) {
return 'ΠΠ°Π³ΡΡΠ·ΠΊΠ°...';
}
return isOnline ? 'Π ΡΠ΅ΡΠΈ' : 'ΠΠ΅ Π² ΡΠ΅ΡΠΈ';
}
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ°ΡΠ° ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΎΠ², ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π·Π΅Π»ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΉΡΠ°Ρ Π² ΡΠ΅ΡΠΈ. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΡ Π²ΡΡΠ΅ Π»ΠΎΠ³ΠΈΠΊΡ Π² Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ FriendListItem
, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΌΡΠΉ Π»ΡΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ:
import React, { useState, useEffect } from 'react';
function FriendListItem(props) {
const [isOnline, setIsOnline] = useState(null); useEffect(() => { function handleStatusChange(status) { setIsOnline(status.isOnline); } ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange); return () => { ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange); }; });
return (
<li style={{ color: isOnline ? 'green' : 'black' }}>
{props.friend.name}
</li>
);
}
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, ΠΌΡ Π±Ρ Ρ
ΠΎΡΠ΅Π»ΠΈ, ΡΡΠΎΠ±Ρ FriendStatus
ΠΈ FriendListItem
ΡΠ°Π·Π΄Π΅Π»ΡΠ»ΠΈ ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ.
ΠΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ , Π² React ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡ ΡΠ΅Π½Π΄Π΅Ρ-ΠΏΡΠΎΠΏΡΡ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Ρ ΡΠΊΠΈ ΡΠ΅ΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΠ΅Ρ ΠΆΠ΅ Π·Π°Π΄Π°Ρ, Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π»ΠΈΡΠ½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² Π²Π°ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ.
ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Ρ ΡΠΊ
ΠΠΎΠ³Π΄Π° ΠΌΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ Π΄Π²Π΅ JavaScript-ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ»ΠΈ ΠΊΠ°ΠΊΡΡ-ΡΠΎ Π»ΠΎΠ³ΠΈΠΊΡ, ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π΅Ρ Π² ΡΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ. Π ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈ Ρ ΡΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½ΠΈΠΌΠΈ ΡΡΠΎ ΡΠΎΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ!
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Ρ
ΡΠΊ β ΡΡΠΎ JavaScript-ΡΡΠ½ΠΊΡΠΈΡ, ΠΈΠΌΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Β«useΒ», ΠΈ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Ρ
ΡΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ useFriendStatus
Π½ΠΈΠΆΠ΅ β ΡΡΠΎ Π½Π°Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Ρ
ΡΠΊ:
import { useState, useEffect } from 'react';
function useFriendStatus(friendID) { const [isOnline, setIsOnline] = useState(null);
useEffect(() => {
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
return () => {
ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
};
});
return isOnline;
}
ΠΠ΄Π΅ΡΡ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ, Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΎΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Π° ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π²ΡΡΠ΅. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ , ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Ρ ΡΠΊΠΈ Π²Π½ΡΡΡΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΠΈΡ Π½Π° Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ Π²Π°ΡΠ΅Π³ΠΎ Ρ ΡΠΊΠ°.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Ρ
ΡΠΊ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ ΠΎΠ½ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²ΡΡ ΠΊΠ°ΠΊ Π² ΠΎΠ±ΡΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΡΡ
. ΠΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ-Ρ
ΡΠΊΠ° Π²ΡΠ΅Π³Π΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π°ΡΠΈΠ½Π°ΡΡ Ρ use
, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΡΡΠ°Π·Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΊ Π½Π΅ΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Ρ
ΡΠΊΠΎΠ².
Π¦Π΅Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ Ρ
ΡΠΊΠ° useFriendStatus
β ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡ Π½Π°Ρ Π½Π° ΡΡΠ°ΡΡΡ Π΄ΡΡΠ³Π°. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° friendID
ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ°ΡΡΡ Π΄ΡΡΠ³Π° Π² ΡΠ΅ΡΠΈ:
function useFriendStatus(friendID) {
const [isOnline, setIsOnline] = useState(null);
// ...
return isOnline;
}
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Ρ ΡΠΊ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Ρ ΡΠΊΠ°
ΠΠ½Π°ΡΠ°Π»Π΅ Π½Π°ΡΠ΅ΠΉ ΡΠ΅Π»ΡΡ Π±ΡΠ»ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² FriendStatus
ΠΈ FriendListItem
. ΠΠ½ΠΈ ΠΎΠ±Π° Ρ
ΠΎΡΡΡ Π·Π½Π°ΡΡ, Π΅ΡΡΡ Π»ΠΈ Π΄ΡΡΠ³ Π² ΡΠ΅ΡΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² Ρ
ΡΠΊ useFriendStatus
, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
function FriendStatus(props) {
const isOnline = useFriendStatus(props.friend.id);
if (isOnline === null) {
return 'ΠΠ°Π³ΡΡΠ·ΠΊΠ°...';
}
return isOnline ? 'Π ΡΠ΅ΡΠΈ' : 'ΠΠ΅ Π² ΡΠ΅ΡΠΈ';
}
function FriendListItem(props) {
const isOnline = useFriendStatus(props.friend.id);
return (
<li style={{ color: isOnline ? 'green' : 'black' }}>
{props.friend.name}
</li>
);
}
ΠΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ ΡΠ°Π½ΡΡΠ΅? ΠΠ°, ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ, Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅, ΡΡΠΎ ΠΌΡ Π½Π΅ Π²Π½ΠΎΡΠΈΠ»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π»ΠΎΠ³ΠΈΠΊΡ. ΠΡΡ, ΡΡΠΎ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ, ΡΡΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ ΠΎΠ±ΡΠΈΠΉ ΠΊΠΎΠ΄ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Ρ ΡΠΊΠΈ β ΡΡΠΎ ΡΠΊΠΎΡΠ΅Π΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π΄ΠΈΠ·Π°ΠΉΠ½Ρ Ρ ΡΠΊΠΎΠ², Π½Π΅ΠΆΠ΅Π»ΠΈ ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ React.
ΠΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ Ρ ΠΏΠΈΡΠ°ΡΡ Β«useΒ» Π² Π½Π°ΡΠ°Π»Π΅ Π½Π°Π·Π²Π°Π½ΠΈΡ Ρ ΡΠΊΠ°? ΠΡΠ΅Π½Ρ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, Π±Π΅Π· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» Ρ ΡΠΊΠΎΠ², ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²Ρ Ρ ΡΠΊΠΎΠ² Π²Π½ΡΡΡΠΈ.
Π£ Ρ ΡΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π² Π΄Π²ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ , ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅? ΠΠ΅Ρ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Ρ ΡΠΊΠΈ β ΡΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ), Π½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Ρ ΡΠΊ, Π²ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ ΡΡΡΠ΅ΠΊΡΡ Π²Π½ΡΡΡΠΈ Π½Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Ρ.
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Ρ
ΡΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅? ΠΠ°ΠΆΠ΄ΡΠΉ Π²ΡΠ·ΠΎΠ² Ρ
ΡΠΊΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ useFriendStatus
Π½Π°ΠΏΡΡΠΌΡΡ, Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ React Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ useState
ΠΈ useEffect
. Π ΠΊΠ°ΠΊ ΠΌΡ ΡΠ·Π½Π°Π»ΠΈ ΡΠ°Π½Π΅Π΅, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ useState
ΠΈ useEffect
ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅, ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡ.
Π‘ΠΎΠ²Π΅Ρ: ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Ρ ΡΠΊΠ°ΠΌΠΈ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΡΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ.
ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΡΡΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠ· Π½Π°ΡΠ΅Π³ΠΎ Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΠ°. ΠΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π²ΡΠ±ΠΎΡΠ° ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΠ°ΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄ΡΡΠ³ Π² ΡΠ΅ΡΠΈ:
const friendList = [
{ id: 1, name: 'Π’Π°ΡΡΡΠ½Π°' },
{ id: 2, name: 'ΠΠ»Π»Π°' },
{ id: 3, name: 'ΠΠΈΠ»Ρ' },
];
function ChatRecipientPicker() {
const [recipientID, setRecipientID] = useState(1); const isRecipientOnline = useFriendStatus(recipientID);
return (
<>
<Circle color={isRecipientOnline ? 'green' : 'red'} /> <select
value={recipientID}
onChange={e => setRecipientID(Number(e.target.value))}
>
{friendList.map(friend => (
<option key={friend.id} value={friend.id}>
{friend.name}
</option>
))}
</select>
</>
);
}
ΠΡ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄ΡΡΠ³Π° Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ recipientID
ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π΄ΡΡΠ³Π° Π² <select>
.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ·ΠΎΠ² Ρ
ΡΠΊΠ° useState
Π΄Π°ΡΡ Π½Π°ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ recipientID
, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π² Π½Π°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Ρ
ΡΠΊ useFriendStatus
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°:
const [recipientID, setRecipientID] = useState(1);
const isRecipientOnline = useFriendStatus(recipientID);
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ·Π½Π°ΡΡ, Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ Π΄ΡΡΠ³ Π² ΡΠ΅ΡΠΈ. ΠΡΠ»ΠΈ ΠΌΡ Π²ΡΠ±Π΅ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π΄ΡΡΠ³Π° ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ recipientID
, Π½Π°Ρ Ρ
ΡΠΊ useFriendStatus
ΠΎΡΠΌΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ Π½Π° ΡΠ°Π½Π΅Π΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π΄ΡΡΠ³Π° ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΡΡΡ Π½Π° ΡΡΠ°ΡΡΡ Π²Π½ΠΎΠ²Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ.
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΠΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅()
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Ρ ΡΠΊΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π³ΠΈΠ±ΠΊΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π½ΡΡΠ΅ Π±ΡΠ»Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π² React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ . ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Ρ ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡ ΡΠΈΡΠΎΠΊΠΈΠΉ ΡΠΏΠ΅ΠΊΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΡΠΌ, Π°Π½ΠΈΠΌΠ°ΡΠΈΡ, Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ, ΡΠ°ΠΉΠΌΠ΅ΡΡ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Ρ ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ React.
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ°Π½ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ, Π²ΠΏΠΎΠ»Π½Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠ΅Π΄Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΡΠ°Π½Π΅Ρ Π΄Π»ΠΈΠ½Π½Π΅Π΅ Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅. ΠΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π½Π΅ Π΄ΡΠΌΠ°ΠΉΡΠ΅, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π΅Π³ΠΎ Π½Π° Ρ ΡΠΊΠΈ. ΠΠΎ ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ Π²Π°ΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Ρ ΡΠΊ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠΊΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π·Π° ΠΏΡΠΎΡΡΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΈΠ»ΠΈ ΡΠ°ΡΠΏΡΡΠ°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΎΠ±ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. useState
Π½Π΅ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ Redux-ΡΠ΅Π΄ΡΡΠ΅Ρ:
function todosReducer(state, action) {
switch (action.type) {
case 'add':
return [...state, {
text: action.text,
completed: false
}];
// ... Π΄ΡΡΠ³ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ...
default:
return state;
}
}
Π Π΅Π΄ΡΡΠ΅ΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎ ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΡ ΠΈΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠ΅Π΄ΡΡΠ΅ΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π½ΡΠ°Π²ΠΈΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ React, ΠΈΠ»ΠΈ Π²Ρ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π΅ΡΡ ΠΎΠ΄Π½Ρ ΡΡΠΎΡΠΎΠ½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
Π§ΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ Ρ
ΡΠΊ useReducer
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π΄ΡΡΠ΅ΡΠ°? Π£ΠΏΡΠΎΡΡΠ½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
function useReducer(reducer, initialState) {
const [state, setState] = useState(initialState);
function dispatch(action) {
const nextState = reducer(state, action);
setState(nextState);
}
return [state, dispatch];
}
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π΄ΡΡΠ΅ΡΠ° ΡΠΏΡΠ°Π²Π»ΡΡΡ Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ:
function Todos() {
const [todos, dispatch] = useReducer(todosReducer, []);
function handleAddClick(text) {
dispatch({ type: 'add', text });
}
// ...
}
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π΄ΡΡΠ΅ΡΠ° Π² ΡΠ»ΠΎΠΆΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π°, ΠΌΡ Π²ΡΡΡΠΎΠΈΠ»ΠΈ Ρ
ΡΠΊ useReducer
ΠΏΡΡΠΌΠΎ Π² React. ΠΡ Π½Π°ΠΉΠ΄ΡΡΠ΅ Π΅Π³ΠΎ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ Ρ
ΡΠΊΠ°ΠΌΠΈ Π² API-ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊΠ΅ Ρ
ΡΠΊΠΎΠ².