Redux yerine yeni React Context API kullanarak yeni bir uygulama geliştiriyorum ve daha önce, Redux
örneğin bir kullanıcı listesi almam gerektiğinde, sadece componentDidMount
eylemimi çağırıyorum , ancak şimdi React Context ile eylemlerim içeride yaşıyor Benim render fonksiyonumun içinde bulunan Tüketicim, yani render fonksiyonum her çağrıldığında, kullanıcı listemi almak için eylemimi çağıracak ve bu iyi değil çünkü çok fazla gereksiz istek yapıyor olacağım.
Öyleyse, componentDidMount
render'da çağırmak yerine, eylemimi sadece bir kez çağırabilirim ?
Örnek vermek için şu koda bakın:
Diyelim ki hepsini Providers
tek bir bileşene sardım, şöyle:
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>
)
}
}
Sonra bu Sağlayıcı bileşenini tüm uygulamamı şu şekilde sarmaladım:
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>
)
}
}
Şimdi, örneğin kullanıcılarımın görüşüne göre, şöyle bir şey olacak:
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>
)
}
}
İstediğim şu:
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>
)
}
}
Ancak elbette yukarıdaki örnek çalışmıyor çünkü getUsers
Kullanıcılarımın görünümünde yaşamıyor. Bu mümkünse, bunu yapmanın doğru yolu nedir?