ฉันกำลังพัฒนาแอปใหม่โดยใช้ React Context API ใหม่แทน Redux และก่อนหน้านี้Redux
เมื่อฉันต้องการรับรายชื่อผู้ใช้เช่นฉันเรียกcomponentDidMount
สิ่งที่ทำ แต่ตอนนี้ด้วย React Context การกระทำของฉันอยู่ภายใน ผู้บริโภคของฉันซึ่งอยู่ในฟังก์ชันการเรนเดอร์ของฉันซึ่งหมายความว่าทุกครั้งที่เรียกใช้ฟังก์ชันการเรนเดอร์ระบบจะเรียกการดำเนินการของฉันเพื่อรับรายชื่อผู้ใช้ของฉันและนั่นไม่ดีเพราะฉันจะดำเนินการตามคำขอที่ไม่จำเป็นจำนวนมาก
ดังนั้นฉันจะเรียกเพียงครั้งเดียวการกระทำของฉันเช่น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
ไม่ได้อยู่ในอุปกรณ์ประกอบการดูผู้ใช้ของฉัน อะไรคือวิธีที่ถูกต้องที่จะทำถ้าเป็นไปได้ทั้งหมด?