AJAX ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ API
ΠΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ AJAX-Π·Π°ΠΏΡΠΎΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ?
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π² Π±ΡΠ°ΡΠ·Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ window.fetch ΠΈΠ»ΠΈ Π»ΡΠ±ΡΡ AJAX-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Axios ΠΈΠ»ΠΈ jQuery AJAX.
ΠΠ΄Π΅ Π² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π»ΡΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ Π·Π°ΠΏΡΠΎΡ?
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ AJAX-Π·Π°ΠΏΡΠΎΡ Π² componentDidMount
. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ setState
, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ: Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ· AJAX-Π·Π°ΠΏΡΠΎΡΠ°
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π² componentDidMount
Π·Π°Π΄Π°ΡΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° AJAX-Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠΎΠΏΡΡΡΠΈΠΌ, Π½Π°Ρ API Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ JSON-ΠΎΠ±ΡΠ΅ΠΊΡ:
{
"items": [
{ "id": 1, "name": "Π―Π±Π»ΠΎΠΊΠΈ", "price": "$2" },
{ "id": 2, "name": "ΠΠ΅ΡΡΠΈΠΊΠΈ", "price": "$5" }
]
}
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
error: null,
isLoaded: false,
items: []
};
}
componentDidMount() {
fetch("https://api.example.com/items")
.then(res => res.json())
.then(
(result) => {
this.setState({
isLoaded: true,
items: result.items
});
},
// ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π²Π°ΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π΄Π΅ΡΡ, Π° Π½Π΅ Π² Π±Π»ΠΎΠΊΠ΅ catch(),
// ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠ°ΠΌΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ
.
(error) => {
this.setState({
isLoaded: true,
error
});
}
)
}
render() {
const { error, isLoaded, items } = this.state;
if (error) {
return <div>ΠΡΠΈΠ±ΠΊΠ°: {error.message}</div>;
} else if (!isLoaded) {
return <div>ΠΠ°Π³ΡΡΠ·ΠΊΠ°...</div>;
} else {
return (
<ul>
{items.map(item => (
<li key={item.id}>
{item.name} {item.price}
</li>
))}
</ul>
);
}
}
}
ΠΠΎΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Ρ Ρ ΡΠΊΠ°ΠΌΠΈ:
function MyComponent() {
const [error, setError] = useState(null);
const [isLoaded, setIsLoaded] = useState(false);
const [items, setItems] = useState([]);
// ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΏΡΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ [] ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ
// ΡΡΠΎΡ useEffect Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·
// Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ componentDidMount()
useEffect(() => {
fetch("https://api.example.com/items")
.then(res => res.json())
.then(
(result) => {
setIsLoaded(true);
setItems(result);
},
// ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π²Π°ΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π΄Π΅ΡΡ, Π° Π½Π΅ Π² Π±Π»ΠΎΠΊΠ΅ catch(),
// ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠ°ΠΌΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ
.
(error) => {
setIsLoaded(true);
setError(error);
}
)
}, [])
if (error) {
return <div>ΠΡΠΈΠ±ΠΊΠ°: {error.message}</div>;
} else if (!isLoaded) {
return <div>ΠΠ°Π³ΡΡΠ·ΠΊΠ°...</div>;
} else {
return (
<ul>
{items.map(item => (
<li key={item.id}>
{item.name} {item.price}
</li>
))}
</ul>
);
}
}
Is this page useful?ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ