ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಸಂಕೀರ್ಣ ಸೈಡ್ ಎಫೆಕ್ಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ರಿಯಾಕ್ಟ್ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ ಮತ್ತು ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯ ಶಕ್ತಿಯನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ. ಸ್ವಚ್ಛ ಮತ್ತು ನಿರ್ವಹಿಸಬಲ್ಲ ಕೋಡ್ಗಾಗಿ ಎಫೆಕ್ಟ್ಗಳನ್ನು ಹೇಗೆ ಆರ್ಕೆಸ್ಟ್ರೇಟ್ ಮಾಡುವುದು ಎಂದು ತಿಳಿಯಿರಿ.
ರಿಯಾಕ್ಟ್ ಕಸ್ಟಮ್ ಹುಕ್ ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆ: ಸಂಕೀರ್ಣ ಎಫೆಕ್ಟ್ ಆರ್ಕೆಸ್ಟ್ರೇಶನ್ನಲ್ಲಿ ಪ್ರಾವೀಣ್ಯತೆ
ರಿಯಾಕ್ಟ್ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳು ನಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಸ್ಟೇಟ್ಫುಲ್ ಲಾಜಿಕ್ ಮತ್ತು ಸೈಡ್ ಎಫೆಕ್ಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸುವ ವಿಧಾನವನ್ನು ಕ್ರಾಂತಿಗೊಳಿಸಿವೆ. useEffect
ಒಂದು ಶಕ್ತಿಯುತ ಸಾಧನವಾಗಿದ್ದರೂ, ಸಂಕೀರ್ಣ ಕಾಂಪೊನೆಂಟ್ಗಳು ಬಹು, ಹೆಣೆದುಕೊಂಡಿರುವ ಎಫೆಕ್ಟ್ಗಳಿಂದ ಬೇಗನೆ ತೊಡಕಾಗಬಹುದು. ಇಲ್ಲಿಯೇ ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆ ಬರುತ್ತದೆ – ಇದು ಸಂಕೀರ್ಣ ಎಫೆಕ್ಟ್ಗಳನ್ನು ಸಣ್ಣ, ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳಾಗಿ ವಿಭಜಿಸಲು ನಮಗೆ ಅನುಮತಿಸುವ ಒಂದು ತಂತ್ರವಾಗಿದೆ, ಇದು ಸ್ವಚ್ಛ ಮತ್ತು ಹೆಚ್ಚು ನಿರ್ವಹಿಸಬಲ್ಲ ಕೋಡ್ಗೆ ಕಾರಣವಾಗುತ್ತದೆ.
ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆ ಎಂದರೇನು?
ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆ ಎನ್ನುವುದು ದೊಡ್ಡ, ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾದ ಎಫೆಕ್ಟ್ ಅನ್ನು ರಚಿಸಲು, ಸಾಮಾನ್ಯವಾಗಿ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳಲ್ಲಿ ಅಡಕವಾಗಿರುವ ಅನೇಕ ಸಣ್ಣ ಎಫೆಕ್ಟ್ಗಳನ್ನು ಸಂಯೋಜಿಸುವ ಅಭ್ಯಾಸವಾಗಿದೆ. ಎಲ್ಲಾ ಲಾಜಿಕ್ ಅನ್ನು ಒಂದೇ useEffect
ಕರೆಯಲ್ಲಿ ತುರುಕುವ ಬದಲು, ನಾವು ಅಗತ್ಯಕ್ಕೆ ತಕ್ಕಂತೆ ಒಟ್ಟಿಗೆ ಸಂಯೋಜಿಸಬಹುದಾದ ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಕಾರ್ಯಚಟುವಟಿಕೆಯ ಘಟಕಗಳನ್ನು ರಚಿಸುತ್ತೇವೆ. ಈ ವಿಧಾನವು ಕೋಡ್ ಮರುಬಳಕೆಯನ್ನು ಉತ್ತೇಜಿಸುತ್ತದೆ, ಓದುವಿಕೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ ಮತ್ತು ಪರೀಕ್ಷೆಯನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ.
ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯನ್ನು ಏಕೆ ಬಳಸಬೇಕು?
ನಿಮ್ಮ ರಿಯಾಕ್ಟ್ ಪ್ರಾಜೆಕ್ಟ್ಗಳಲ್ಲಿ ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಲು ಹಲವಾರು ಬಲವಾದ ಕಾರಣಗಳಿವೆ:
- ಸುಧಾರಿತ ಕೋಡ್ ಮರುಬಳಕೆ: ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳನ್ನು ಬಹು ಕಾಂಪೊನೆಂಟ್ಗಳಲ್ಲಿ ಮರುಬಳಕೆ ಮಾಡಬಹುದು, ಇದು ಕೋಡ್ ನಕಲು ಮಾಡುವುದನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ ಮತ್ತು ನಿರ್ವಹಣೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ.
- ವರ್ಧಿತ ಓದುವಿಕೆ: ಸಂಕೀರ್ಣ ಎಫೆಕ್ಟ್ಗಳನ್ನು ಸಣ್ಣ, ಕೇಂದ್ರೀಕೃತ ಘಟಕಗಳಾಗಿ ವಿಭಜಿಸುವುದು ಕೋಡ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಮತ್ತು ಅದರ ಬಗ್ಗೆ ತರ್ಕಿಸಲು ಸುಲಭಗೊಳಿಸುತ್ತದೆ.
- ಸರಳೀಕೃತ ಪರೀಕ್ಷೆ: ಸಣ್ಣ, ಪ್ರತ್ಯೇಕವಾದ ಎಫೆಕ್ಟ್ಗಳನ್ನು ಪರೀಕ್ಷಿಸಲು ಮತ್ತು ಡೀಬಗ್ ಮಾಡಲು ಸುಲಭವಾಗಿರುತ್ತದೆ.
- ಹೆಚ್ಚಿದ ಮಾಡ್ಯುಲಾರಿಟಿ: ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯು ಮಾಡ್ಯುಲರ್ ಆರ್ಕಿಟೆಕ್ಚರ್ ಅನ್ನು ಉತ್ತೇಜಿಸುತ್ತದೆ, ಇದು ಅಪ್ಲಿಕೇಶನ್ನ ಇತರ ಭಾಗಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರದಂತೆ ಕಾರ್ಯಚಟುವಟಿಕೆಯನ್ನು ಸೇರಿಸಲು, ತೆಗೆದುಹಾಕಲು ಅಥವಾ ಮಾರ್ಪಡಿಸಲು ಸುಲಭಗೊಳಿಸುತ್ತದೆ.
- ಕಡಿಮೆಯಾದ ಸಂಕೀರ್ಣತೆ: ಒಂದೇ
useEffect
ನಲ್ಲಿ ಹೆಚ್ಚಿನ ಸಂಖ್ಯೆಯ ಸೈಡ್ ಎಫೆಕ್ಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು ಸ್ಪಗೆಟ್ಟಿ ಕೋಡ್ಗೆ ಕಾರಣವಾಗಬಹುದು. ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯು ಸಂಕೀರ್ಣತೆಯನ್ನು ನಿರ್ವಹಿಸಬಲ್ಲ ತುಣುಕುಗಳಾಗಿ ವಿಭಜಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.
ಮೂಲ ಉದಾಹರಣೆ: ಡೇಟಾ ಫೆಚಿಂಗ್ ಮತ್ತು ಲೋಕಲ್ ಸ್ಟೋರೇಜ್ ಪರ್ಸಿಸ್ಟೆನ್ಸ್ ಅನ್ನು ಸಂಯೋಜಿಸುವುದು
ನಾವು API ನಿಂದ ಬಳಕೆದಾರರ ಡೇಟಾವನ್ನು ಪಡೆದುಕೊಳ್ಳಬೇಕು ಮತ್ತು ಅದನ್ನು ಲೋಕಲ್ ಸ್ಟೋರೇಜ್ನಲ್ಲಿ ಉಳಿಸಬೇಕಾದ ಸನ್ನಿವೇಶವನ್ನು ಪರಿಗಣಿಸೋಣ. ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆ ಇಲ್ಲದೆ, ನಾವು ಎರಡೂ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಒಂದೇ useEffect
ನೊಂದಿಗೆ ಕೊನೆಗೊಳ್ಳಬಹುದು. ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯೊಂದಿಗೆ ಅದೇ ಫಲಿತಾಂಶವನ್ನು ನಾವು ಹೇಗೆ ಸಾಧಿಸಬಹುದು ಎಂಬುದು ಇಲ್ಲಿದೆ:
1. useFetchData
ಹುಕ್ ಅನ್ನು ರಚಿಸುವುದು
ಈ ಹುಕ್ API ನಿಂದ ಡೇಟಾವನ್ನು ಪಡೆದುಕೊಳ್ಳಲು ಜವಾಬ್ದಾರವಾಗಿರುತ್ತದೆ.
import { useState, useEffect } from 'react';
function useFetchData(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const fetchData = async () => {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const json = await response.json();
setData(json);
} catch (error) {
setError(error);
} finally {
setLoading(false);
}
};
fetchData();
}, [url]);
return { data, loading, error };
}
export default useFetchData;
2. useLocalStorage
ಹುಕ್ ಅನ್ನು ರಚಿಸುವುದು
ಈ ಹುಕ್ ಲೋಕಲ್ ಸ್ಟೋರೇಜ್ಗೆ ಡೇಟಾವನ್ನು ಉಳಿಸುವುದನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.
import { useState, useEffect } from 'react';
function useLocalStorage(key, initialValue) {
const [storedValue, setStoredValue] = useState(() => {
try {
const item = window.localStorage.getItem(key);
return item ? JSON.parse(item) : initialValue;
} catch (error) {
console.error(error);
return initialValue;
}
});
useEffect(() => {
try {
window.localStorage.setItem(key, JSON.stringify(storedValue));
} catch (error) {
console.error(error);
}
}, [key, storedValue]);
return [storedValue, setStoredValue];
}
export default useLocalStorage;
3. ಕಾಂಪೊನೆಂಟ್ನಲ್ಲಿ ಹುಕ್ಸ್ಗಳನ್ನು ಸಂಯೋಜಿಸುವುದು
ಈಗ ನಾವು ಬಳಕೆದಾರರ ಡೇಟಾವನ್ನು ಪಡೆದುಕೊಳ್ಳಲು ಮತ್ತು ಅದನ್ನು ಲೋಕಲ್ ಸ್ಟೋರೇಜ್ನಲ್ಲಿ ಉಳಿಸಲು ಒಂದು ಕಾಂಪೊನೆಂಟ್ನಲ್ಲಿ ಈ ಹುಕ್ಸ್ಗಳನ್ನು ಸಂಯೋಜಿಸಬಹುದು.
import React from 'react';
import useFetchData from './useFetchData';
import useLocalStorage from './useLocalStorage';
function UserProfile() {
const { data: userData, loading, error } = useFetchData('https://api.example.com/user/profile');
const [storedUserData, setStoredUserData] = useLocalStorage('userProfile', null);
useEffect(() => {
if (userData) {
setStoredUserData(userData);
}
}, [userData, setStoredUserData]);
if (loading) {
return Loading user profile...
;
}
if (error) {
return Error fetching user profile: {error.message}
;
}
if (!userData && !storedUserData) {
return No user data available.
;
}
const userToDisplay = storedUserData || userData;
return (
User Profile
Name: {userToDisplay.name}
Email: {userToDisplay.email}
);
}
export default UserProfile;
ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, ನಾವು ಡೇಟಾ ಫೆಚಿಂಗ್ ಲಾಜಿಕ್ ಮತ್ತು ಲೋಕಲ್ ಸ್ಟೋರೇಜ್ ಪರ್ಸಿಸ್ಟೆನ್ಸ್ ಲಾಜಿಕ್ ಅನ್ನು ಎರಡು ಪ್ರತ್ಯೇಕ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳಾಗಿ ವಿಂಗಡಿಸಿದ್ದೇವೆ. ನಂತರ UserProfile
ಕಾಂಪೊನೆಂಟ್ ಈ ಹುಕ್ಸ್ಗಳನ್ನು ಸಂಯೋಜಿಸಿ ಬಯಸಿದ ಕಾರ್ಯವನ್ನು ಸಾಧಿಸುತ್ತದೆ. ಈ ವಿಧಾನವು ಕೋಡ್ ಅನ್ನು ಹೆಚ್ಚು ಮಾಡ್ಯುಲರ್, ಮರುಬಳಕೆ ಮಾಡಬಲ್ಲ ಮತ್ತು ಪರೀಕ್ಷಿಸಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ.
ಸುಧಾರಿತ ಉದಾಹರಣೆಗಳು: ಸಂಕೀರ್ಣ ಎಫೆಕ್ಟ್ಗಳನ್ನು ಆರ್ಕೆಸ್ಟ್ರೇಟ್ ಮಾಡುವುದು
ಹೆಚ್ಚು ಸಂಕೀರ್ಣ ಸನ್ನಿವೇಶಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯು ಇನ್ನಷ್ಟು ಶಕ್ತಿಯುತವಾಗುತ್ತದೆ. ಕೆಲವು ಸುಧಾರಿತ ಉದಾಹರಣೆಗಳನ್ನು ಅನ್ವೇಷಿಸೋಣ.
1. ಸಬ್ಸ್ಕ್ರಿಪ್ಷನ್ಗಳು ಮತ್ತು ಈವೆಂಟ್ ಲಿಸನರ್ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು
ನೀವು WebSocket ಗೆ ಸಬ್ಸ್ಕ್ರೈಬ್ ಮಾಡಬೇಕಾದ ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಈವೆಂಟ್ಗಳನ್ನು ಕೇಳಬೇಕಾದ ಸನ್ನಿವೇಶವನ್ನು ಪರಿಗಣಿಸಿ. ಕಾಂಪೊನೆಂಟ್ ಅನ್ಮೌಂಟ್ ಆದಾಗ ನೀವು ಕ್ಲೀನಪ್ ಅನ್ನು ಸಹ ನಿರ್ವಹಿಸಬೇಕಾಗುತ್ತದೆ. ಇದನ್ನು ನಿರ್ವಹಿಸಲು ನೀವು ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯನ್ನು ಹೇಗೆ ಬಳಸಬಹುದು ಎಂಬುದು ಇಲ್ಲಿದೆ:
a. useWebSocket
ಹುಕ್ ಅನ್ನು ರಚಿಸುವುದು
ಈ ಹುಕ್ WebSocket ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸುತ್ತದೆ ಮತ್ತು ಮರುಸಂಪರ್ಕ ಲಾಜಿಕ್ ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.
import { useState, useEffect, useRef } from 'react';
function useWebSocket(url) {
const [socket, setSocket] = useState(null);
const [isConnected, setIsConnected] = useState(false);
const retryCount = useRef(0);
useEffect(() => {
const connect = () => {
const newSocket = new WebSocket(url);
newSocket.onopen = () => {
console.log('WebSocket connected');
setIsConnected(true);
retryCount.current = 0;
};
newSocket.onclose = () => {
console.log('WebSocket disconnected');
setIsConnected(false);
// Exponential backoff for reconnection
const timeout = Math.min(3000 * Math.pow(2, retryCount.current), 60000);
retryCount.current++;
console.log(`Reconnecting in ${timeout/1000} seconds...`);
setTimeout(connect, timeout);
};
newSocket.onerror = (error) => {
console.error('WebSocket error:', error);
};
setSocket(newSocket);
};
connect();
return () => {
if (socket) {
socket.close();
}
};
}, [url]);
return { socket, isConnected };
}
export default useWebSocket;
b. useEventListener
ಹುಕ್ ಅನ್ನು ರಚಿಸುವುದು
ಈ ಹುಕ್ WebSocket ನಲ್ಲಿ ನಿರ್ದಿಷ್ಟ ಈವೆಂಟ್ಗಳನ್ನು ಸುಲಭವಾಗಿ ಕೇಳಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.
import { useEffect } from 'react';
function useEventListener(socket, eventName, handler) {
useEffect(() => {
if (!socket) return;
const listener = (event) => handler(event);
socket.addEventListener(eventName, listener);
return () => {
socket.removeEventListener(eventName, listener);
};
}, [socket, eventName, handler]);
}
export default useEventListener;
c. ಕಾಂಪೊನೆಂಟ್ನಲ್ಲಿ ಹುಕ್ಸ್ಗಳನ್ನು ಸಂಯೋಜಿಸುವುದು
import React, { useState } from 'react';
import useWebSocket from './useWebSocket';
import useEventListener from './useEventListener';
function WebSocketComponent() {
const { socket, isConnected } = useWebSocket('wss://echo.websocket.events');
const [message, setMessage] = useState('');
const [receivedMessages, setReceivedMessages] = useState([]);
useEventListener(socket, 'message', (event) => {
setReceivedMessages((prevMessages) => [...prevMessages, event.data]);
});
const sendMessage = () => {
if (socket && isConnected) {
socket.send(message);
setMessage('');
}
};
return (
WebSocket Example
Connection Status: {isConnected ? 'Connected' : 'Disconnected'}
setMessage(e.target.value)}
placeholder="Enter message"
/>
Received Messages:
{receivedMessages.map((msg, index) => (
- {msg}
))}
);
}
export default WebSocketComponent;
ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, useWebSocket
ಮರುಸಂಪರ್ಕ ಲಾಜಿಕ್ ಸೇರಿದಂತೆ WebSocket ಸಂಪರ್ಕವನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ, ಆದರೆ useEventListener
ನಿರ್ದಿಷ್ಟ ಈವೆಂಟ್ಗಳಿಗೆ ಸಬ್ಸ್ಕ್ರೈಬ್ ಮಾಡಲು ಸ್ವಚ್ಛವಾದ ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತದೆ. WebSocketComponent
ಸಂಪೂರ್ಣವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವ WebSocket ಕ್ಲೈಂಟ್ ಅನ್ನು ರಚಿಸಲು ಈ ಹುಕ್ಸ್ಗಳನ್ನು ಸಂಯೋಜಿಸುತ್ತದೆ.
2. ಡಿಪೆಂಡೆನ್ಸಿಗಳೊಂದಿಗೆ ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಆರ್ಕೆಸ್ಟ್ರೇಟ್ ಮಾಡುವುದು
ಕೆಲವೊಮ್ಮೆ, ಎಫೆಕ್ಟ್ಗಳನ್ನು ನಿರ್ದಿಷ್ಟ ಕ್ರಮದಲ್ಲಿ ಅಥವಾ ಕೆಲವು ಡಿಪೆಂಡೆನ್ಸಿಗಳ ಆಧಾರದ ಮೇಲೆ ಪ್ರಚೋದಿಸಬೇಕಾಗುತ್ತದೆ. ನೀವು ಬಳಕೆದಾರರ ಡೇಟಾವನ್ನು ಪಡೆದುಕೊಳ್ಳಬೇಕು, ನಂತರ ಬಳಕೆದಾರ ID ಆಧರಿಸಿ ಅವರ ಪೋಸ್ಟ್ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಬೇಕು, ಮತ್ತು ನಂತರ UI ಅನ್ನು ನವೀಕರಿಸಬೇಕು ಎಂದು ಭಾವಿಸೋಣ. ಈ ಅಸಿಂಕ್ರೋನಸ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಆರ್ಕೆಸ್ಟ್ರೇಟ್ ಮಾಡಲು ನೀವು ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯನ್ನು ಬಳಸಬಹುದು.
a. useUserData
ಹುಕ್ ಅನ್ನು ರಚಿಸುವುದು
ಈ ಹುಕ್ ಬಳಕೆದಾರರ ಡೇಟಾವನ್ನು ಪಡೆದುಕೊಳ್ಳುತ್ತದೆ.
import { useState, useEffect } from 'react';
function useUserData(userId) {
const [userData, setUserData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const fetchData = async () => {
try {
const response = await fetch(`https://api.example.com/users/${userId}`);
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const json = await response.json();
setUserData(json);
} catch (error) {
setError(error);
} finally {
setLoading(false);
}
};
fetchData();
}, [userId]);
return { userData, loading, error };
}
export default useUserData;
b. useUserPosts
ಹುಕ್ ಅನ್ನು ರಚಿಸುವುದು
ಈ ಹುಕ್ ಬಳಕೆದಾರ ID ಆಧರಿಸಿ ಬಳಕೆದಾರರ ಪೋಸ್ಟ್ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳುತ್ತದೆ.
import { useState, useEffect } from 'react';
function useUserPosts(userId) {
const [userPosts, setUserPosts] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
if (!userId) {
setUserPosts(null);
setLoading(false);
return;
}
const fetchPosts = async () => {
try {
const response = await fetch(`https://api.example.com/users/${userId}/posts`);
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const json = await response.json();
setUserPosts(json);
} catch (error) {
setError(error);
} finally {
setLoading(false);
}
};
fetchPosts();
}, [userId]);
return { userPosts, loading, error };
}
export default useUserPosts;
c. ಕಾಂಪೊನೆಂಟ್ನಲ್ಲಿ ಹುಕ್ಸ್ಗಳನ್ನು ಸಂಯೋಜಿಸುವುದು
import React, { useState } from 'react';
import useUserData from './useUserData';
import useUserPosts from './useUserPosts';
function UserProfileWithPosts() {
const [userId, setUserId] = useState(1); // Start with a default user ID
const { userData, loading: userLoading, error: userError } = useUserData(userId);
const { userPosts, loading: postsLoading, error: postsError } = useUserPosts(userId);
return (
User Profile with Posts
setUserId(parseInt(e.target.value, 10))}
/>
{userLoading ? Loading user data...
: null}
{userError ? Error loading user data: {userError.message}
: null}
{userData ? (
User Details
Name: {userData.name}
Email: {userData.email}
) : null}
{postsLoading ? Loading user posts...
: null}
{postsError ? Error loading user posts: {postsError.message}
: null}
{userPosts ? (
User Posts
{userPosts.map((post) => (
- {post.title}
))}
) : null}
);
}
export default UserProfileWithPosts;
ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, useUserPosts
userId
ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ಮಾನ್ಯವಾದ userId
ಲಭ್ಯವಿದ್ದಾಗ ಮಾತ್ರ ಹುಕ್ ಪೋಸ್ಟ್ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳುತ್ತದೆ. ಇದು ಎಫೆಕ್ಟ್ಗಳು ಸರಿಯಾದ ಕ್ರಮದಲ್ಲಿ ಪ್ರಚೋದಿಸಲ್ಪಡುವುದನ್ನು ಮತ್ತು UI ಅದಕ್ಕೆ ತಕ್ಕಂತೆ ನವೀಕರಿಸಲ್ಪಡುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಗಾಗಿ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು
ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯಿಂದ ಹೆಚ್ಚಿನ ಪ್ರಯೋಜನ ಪಡೆಯಲು, ಈ ಕೆಳಗಿನ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಪರಿಗಣಿಸಿ:
- ಏಕ ಜವಾಬ್ದಾರಿ ತತ್ವ: ಪ್ರತಿಯೊಂದು ಕಸ್ಟಮ್ ಹುಕ್ ಒಂದೇ, ಸು-ವ್ಯಾಖ್ಯಾನಿತ ಜವಾಬ್ದಾರಿಯನ್ನು ಹೊಂದಿರಬೇಕು.
- ವಿವರಣಾತ್ಮಕ ಹೆಸರುಗಳು: ನಿಮ್ಮ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳ ಉದ್ದೇಶವನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಸೂಚಿಸಲು ವಿವರಣಾತ್ಮಕ ಹೆಸರುಗಳನ್ನು ಬಳಸಿ.
- ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಗಳು: ಅನಗತ್ಯ ಮರು-ರೆಂಡರ್ಗಳು ಅಥವಾ ಅನಂತ ಲೂಪ್ಗಳನ್ನು ತಪ್ಪಿಸಲು ನಿಮ್ಮ
useEffect
ಕರೆಗಳಲ್ಲಿ ಡಿಪೆಂಡೆನ್ಸಿ ಅರೇಗಳನ್ನು ಎಚ್ಚರಿಕೆಯಿಂದ ನಿರ್ವಹಿಸಿ. - ಪರೀಕ್ಷೆ: ನಿಮ್ಮ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳು ನಿರೀಕ್ಷೆಯಂತೆ ವರ್ತಿಸುತ್ತವೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಯೂನಿಟ್ ಪರೀಕ್ಷೆಗಳನ್ನು ಬರೆಯಿರಿ.
- ಡಾಕ್ಯುಮೆಂಟೇಶನ್: ನಿಮ್ಮ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳನ್ನು ಸುಲಭವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಮತ್ತು ಮರುಬಳಕೆ ಮಾಡಲು ಅವುಗಳನ್ನು ದಾಖಲಿಸಿ.
- ಅತಿಯಾದ ಅಮೂರ್ತತೆಯನ್ನು ತಪ್ಪಿಸಿ: ನಿಮ್ಮ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳನ್ನು ಅತಿಯಾಗಿ ಇಂಜಿನಿಯರ್ ಮಾಡಬೇಡಿ. ಅವುಗಳನ್ನು ಸರಳ ಮತ್ತು ಕೇಂದ್ರೀಕೃತವಾಗಿಡಿ.
- ದೋಷ ನಿರ್ವಹಣೆಯನ್ನು ಪರಿಗಣಿಸಿ: ಅನಿರೀಕ್ಷಿತ ಸಂದರ್ಭಗಳನ್ನು ನಾಜೂಕಾಗಿ ನಿರ್ವಹಿಸಲು ನಿಮ್ಮ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳಲ್ಲಿ ದೃಢವಾದ ದೋಷ ನಿರ್ವಹಣೆಯನ್ನು ಅಳವಡಿಸಿ.
ಜಾಗತಿಕ ಪರಿಗಣನೆಗಳು
ಜಾಗತಿಕ ಪ್ರೇಕ್ಷಕರಿಗಾಗಿ ರಿಯಾಕ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವಾಗ, ಈ ಕೆಳಗಿನ ಪರಿಗಣನೆಗಳನ್ನು ನೆನಪಿನಲ್ಲಿಡಿ:
- ಅಂತಾರಾಷ್ಟ್ರೀಕರಣ (i18n): ಬಹು ಭಾಷೆಗಳನ್ನು ಬೆಂಬಲಿಸಲು
react-intl
ಅಥವಾi18next
ನಂತಹ ಲೈಬ್ರರಿಯನ್ನು ಬಳಸಿ. - ಸ್ಥಳೀಕರಣ (l10n): ದಿನಾಂಕ ಮತ್ತು ಸಂಖ್ಯೆ ಸ್ವರೂಪಗಳಂತಹ ವಿಭಿನ್ನ ಪ್ರಾದೇಶಿಕ ಆದ್ಯತೆಗಳಿಗೆ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಹೊಂದಿಸಿ.
- ಪ್ರವೇಶಸಾಧ್ಯತೆ (a11y): WCAG ಮಾರ್ಗಸೂಚಿಗಳನ್ನು ಅನುಸರಿಸುವ ಮೂಲಕ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅಂಗವಿಕಲ ಬಳಕೆದಾರರಿಗೆ ಪ್ರವೇಶಿಸಬಹುದಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
- ಕಾರ್ಯಕ್ಷಮತೆ: ವಿಭಿನ್ನ ನೆಟ್ವರ್ಕ್ ಪರಿಸ್ಥಿತಿಗಳು ಮತ್ತು ಸಾಧನ ಸಾಮರ್ಥ್ಯಗಳಿಗಾಗಿ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡಿ. ಕೋಡ್ ಸ್ಪ್ಲಿಟಿಂಗ್ ಮತ್ತು ಲೇಜಿ ಲೋಡಿಂಗ್ನಂತಹ ತಂತ್ರಗಳನ್ನು ಬಳಸುವುದನ್ನು ಪರಿಗಣಿಸಿ.
- ಕಂಟೆಂಟ್ ಡೆಲಿವರಿ ನೆಟ್ವರ್ಕ್ಗಳು (CDNಗಳು): ನಿಮ್ಮ ಬಳಕೆದಾರರಿಗೆ ಹತ್ತಿರವಿರುವ ಸರ್ವರ್ಗಳಿಂದ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ನ ಸ್ವತ್ತುಗಳನ್ನು ತಲುಪಿಸಲು CDN ಬಳಸಿ, ಇದು ಲೇಟೆನ್ಸಿಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ.
- ಸಮಯ ವಲಯಗಳು: ದಿನಾಂಕಗಳು ಮತ್ತು ಸಮಯಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ, ವಿಭಿನ್ನ ಸಮಯ ವಲಯಗಳ ಬಗ್ಗೆ ಗಮನವಿರಲಿ ಮತ್ತು
moment-timezone
ಅಥವಾdate-fns-timezone
ನಂತಹ ಸೂಕ್ತ ಲೈಬ್ರರಿಗಳನ್ನು ಬಳಸಿ.
ಉದಾಹರಣೆ: ಅಂತಾರಾಷ್ಟ್ರೀಕರಿಸಿದ ದಿನಾಂಕ ಫಾರ್ಮ್ಯಾಟಿಂಗ್
import { useIntl, FormattedDate } from 'react-intl';
function MyComponent() {
const intl = useIntl();
const now = new Date();
return (
Current Date:
Current Date (German):
);
}
export default MyComponent;
ತೀರ್ಮಾನ
ರಿಯಾಕ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಸಂಕೀರ್ಣ ಸೈಡ್ ಎಫೆಕ್ಟ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯು ಒಂದು ಶಕ್ತಿಯುತ ತಂತ್ರವಾಗಿದೆ. ದೊಡ್ಡ ಎಫೆಕ್ಟ್ಗಳನ್ನು ಸಣ್ಣ, ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಕಸ್ಟಮ್ ಹುಕ್ಸ್ಗಳಾಗಿ ವಿಭಜಿಸುವ ಮೂಲಕ, ನೀವು ಕೋಡ್ ಮರುಬಳಕೆಯನ್ನು ಸುಧಾರಿಸಬಹುದು, ಓದುವಿಕೆಯನ್ನು ಹೆಚ್ಚಿಸಬಹುದು, ಪರೀಕ್ಷೆಯನ್ನು ಸರಳಗೊಳಿಸಬಹುದು ಮತ್ತು ಒಟ್ಟಾರೆ ಸಂಕೀರ್ಣತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದು. ಜಾಗತಿಕ ಪ್ರೇಕ್ಷಕರಿಗಾಗಿ ಸ್ವಚ್ಛ, ಹೆಚ್ಚು ನಿರ್ವಹಿಸಬಲ್ಲ ಮತ್ತು ಸ್ಕೇಲೆಬಲ್ ರಿಯಾಕ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ರಚಿಸಲು ಎಫೆಕ್ಟ್ ಸಂಯೋಜನೆಯನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಿ.