मैं Redux के बजाय नए React Context API का उपयोग करके एक नया ऐप विकसित कर रहा हूं, और इससे पहले, Redux
जब मुझे उदाहरण के लिए उपयोगकर्ताओं की सूची प्राप्त करने की आवश्यकता होती है, तो मैं बस componentDidMount
अपनी कार्रवाई में कॉल करता हूं, लेकिन अब रिएक्ट संदर्भ के साथ, मेरे कार्य अंदर रहते हैं मेरा उपभोक्ता जो मेरे रेंडर फ़ंक्शन के अंदर है, जिसका अर्थ है कि हर बार मेरे रेंडर फ़ंक्शन को कॉल किया जाता है, यह मेरे उपयोगकर्ताओं की सूची प्राप्त करने के लिए मेरी कार्रवाई को कॉल करेगा और यह अच्छा नहीं है क्योंकि मैं बहुत सारे आवश्यक अनुरोध कर रहा हूं।
इसलिए, मैं अपनी कार्रवाई में केवल एक बार कॉल कैसे कर सकता हूं, जैसे componentDidMount
कि रेंडर में कॉल करने के बजाय?
उदाहरण के लिए, इस कोड को देखें:
आइए मान लें कि मैं अपने सभी Providers
को एक घटक में लपेट रहा हूं , जैसे:
import React from 'react';
import UserProvider from './UserProvider';
import PostProvider from './PostProvider';
export default class Provider extends React.Component {
render(){
return(
<UserProvider>
<PostProvider>
{this.props.children}
</PostProvider>
</UserProvider>
)
}
}
फिर मैंने अपने सभी ऐप को इस तरह से प्रोवाइडर कंपोनेंट में डाला:
import React from 'react';
import Provider from './providers/Provider';
import { Router } from './Router';
export default class App extends React.Component {
render() {
const Component = Router();
return(
<Provider>
<Component />
</Provider>
)
}
}
अब, उदाहरण के लिए मेरे उपयोगकर्ता देखें, यह कुछ इस तरह होगा:
import React from 'react';
import UserContext from '../contexts/UserContext';
export default class Users extends React.Component {
render(){
return(
<UserContext.Consumer>
{({getUsers, users}) => {
getUsers();
return(
<h1>Users</h1>
<ul>
{users.map(user) => (
<li>{user.name}</li>
)}
</ul>
)
}}
</UserContext.Consumer>
)
}
}
मुझे यह चाहिए:
import React from 'react';
import UserContext from '../contexts/UserContext';
export default class Users extends React.Component {
componentDidMount(){
this.props.getUsers();
}
render(){
return(
<UserContext.Consumer>
{({users}) => {
getUsers();
return(
<h1>Users</h1>
<ul>
{users.map(user) => (
<li>{user.name}</li>
)}
</ul>
)
}}
</UserContext.Consumer>
)
}
}
लेकिन यह कि ऊपर का उदाहरण काम नहीं करता है क्योंकि getUsers
मेरे उपयोगकर्ता दृश्य में नहीं रहते हैं। यदि यह संभव है तो इसे करने का सही तरीका क्या है?