Πώς γίνεται η αλληλεπίδραση δεδομένων μεταξύ Redux και του συστατικού στο React;
sobes.tech AI
Απάντηση από AI
Η αλληλεπίδραση πραγματοποιείται μέσω τριών βασικών μηχανισμών: connect, useSelector και useDispatch.
-
connect (για κλασικά συστατικά, αλλά μπορεί επίσης να χρησιμοποιηθεί με λειτουργικά συστατικά): Συνδέει ένα React συστατικό με το Redux store. Δέχεται δύο συναρτήσεις:
mapStateToPropsκαιmapDispatchToProps.mapStateToProps(state, ownProps): Λαμβάνει την κατάσταση από το Store και τις ιδιότητες του συστατικού, επιστρέφοντας ένα αντικείμενο με δεδομένα από την κατάσταση που θα είναι διαθέσιμα μέσω των ιδιοτήτων.mapDispatchToProps(dispatch, ownProps): Λαμβάνει τη λειτουργίαdispatchκαι τις ιδιότητες του συστατικού, επιστρέφοντας ένα αντικείμενο με λειτουργίες ενεργειών που θα είναι διαθέσιμες μέσω των ιδιοτήτων για την αποστολή ενεργειών στο Store.- Η τιμή που επιστρέφει το
connectείναι μια ανώτερη λειτουργία που περικλείει το συστατικό.
// Απόσπασμα κώδικα import { connect } from 'react-redux'; const mapStateToProps = (state) => ({ count: state.counter.count }); const mapDispatchToProps = (dispatch) => ({ increment: () => dispatch({ type: 'INCREMENT' }) }); const MyComponent = ({ count, increment }) => ( <div> <p>{count}</p> <button onClick={increment}>Αύξηση</button> </div> ); export default connect(mapStateToProps, mapDispatchToProps)(MyComponent); -
useSelector (hook για λειτουργικά συστατικά): Επιτρέπει την εξαγωγή δεδομένων από το Redux Store. Δέχεται μια λειτουργία επιλογέα που λαμβάνει την τρέχουσα κατάσταση του Redux ως όρισμα και επιστρέφει το επιθυμητό τμήμα δεδομένων.
// Απόσπασμα κώδικα import { useSelector } from 'react-redux'; const MyFunctionalComponent = () => { const count = useSelector(state => state.counter.count); return ( <div> <p>{count}</p> </div> ); }; -
useDispatch (hook για λειτουργικά συστατικά): Επιστρέφει μια αναφορά στη λειτουργία
dispatchτου Redux Store. Χρησιμοποιείται για την αποστολή (dispatch) ενεργειών στο Store.// Απόσπασμα κώδικα import { useDispatch } from 'react-redux'; const MyFunctionalComponent = () => { const dispatch = useDispatch(); const handleIncrement = () => { dispatch({ type: 'INCREMENT' }); }; return ( <button onClick={handleIncrement}>Αύξηση</button> ); };
Συνοπτικά, τα δεδομένα από το Redux (που λαμβάνονται μέσω connect ή useSelector) καθίστανται διαθέσιμα στο συστατικό ως ιδιότητες ή μεταβλητές, και οι λειτουργίες για την αλλαγή της κατάστασης (που περνάνε μέσω connect ή useDispatch) χρησιμοποιούνται για την αποστολή ενεργειών, οι οποίες επεξεργάζονται από τους μειωτές και ενημερώνουν την κατάσταση του Store. Όταν αλλάζει το αντίστοιχο μέρος της κατάστασης, το συστατικό που είναι συνδεδεμένο ανανεώνεται αυτόματα με τα νέα δεδομένα.