reactjs - React Context: จัดเตรียมอินสแตนซ์ของ Api Manager
ฉันต้องการเก็บอินสแตนซ์เดียวของคลาสผู้จัดการ API ของบุคคลที่สามในแอป React ของฉัน
ฉันกำลังพยายามทำสิ่งนี้โดยใช้ React Context API แบบนี้:
บริบทของ Api:
import * as React from "react";
import { ApiManager } from "../ApiManager";
const defaultValue = new ApiManager()
const ApiContext = React.createContext(defaultValue);
const ApiProvider = ApiContext.Provider;
const ApiConsumer = ApiContext.Consumer;
const withApi = (enhanced) => {
return (
<ApiConsumer>
{api => enhanced }
</ApiConsumer>
)
}
export default ApiContext;
export {ApiContext, ApiProvider, ApiConsumer, withApi};
ในไคลเอนต์ของฉันฉันจะทำบางอย่างแบบนี้:
const api=new ApiManager({ host: apiHost, baseUrl: apiBaseUrl, key: apKey, sessionToken: persistedSessionToken });
ReactDOM.hydrate(
<Provider store={store}>
<PersistGate loading={<h1>loading...</h1>} persistor={persistor}>
<BrowserRouter>
<ApiProvider value={api}>
<Main />
</ApiProvider>>
</BrowserRouter>
</PersistGate>
</Provider>, document.querySelector('#app')
);
ฉันมีคำถาม 3 ข้อ:
- นี่มันมีความหมายอะไรไหม?
- ฉันจะตั้งค่า sessionToken อย่างไรถ้ามันถูกต่ออายุโดยผู้ใช้?
- ฉันจะทำให้ instance ของ API กลับมามีสภาพสมบูรณ์หลังจากโหลดหน้าซ้ำโดยใช้
redux-persistได้อย่างไร?
คำตอบ #1
- ถ้าคุณแค่อยากใช้เพียงหนึ่งอินสแตนซ์ของ
ApiManagerผมไม่คิดว่าคุณจะต้องใช้ Context API แค่สร้างอินสแตนซ์แล้วส่งออก/นำเข้าในไฟล์ที่คุณต้องการใช้ก็พอ - คุณสามารถห่อหุ้มตัวจัดการ API ของบุคคลที่สามนั้นเพื่อเพิ่มวิธีการบางอย่างที่คุณต้องการเช่น
setSessionTokenเพื่อกำหนด/อัปเดตsessionTokenเมื่อแอปโหลดหรือเมื่อผู้ใช้ได้รับ/รีเฟรชมัน - ทำไมต้องยุ่งกับ
redux-presistในกรณีนี้ (แม้ว่าคุณจะตัดสินใจใช้ Context API) ถ้าไม่ได้ใช้ Redux ถ้าคุณต้องการเก็บsessionTokenก็เก็บมันในlocalStorageหรือแหล่งเก็บข้อมูลอื่นๆ ที่คุณต้องการ มันมี API ที่เรียบง่ายในการตั้งค่า/ดึงค่ามาใช้งาน คุณไม่จำเป็นต้องใช้ไลบรารีสำหรับสิ่งนี้