# #reactjs #typescript #firebase #react-hooks #react-context
Вопрос:
У меня есть контекст, который используется для создания, обновления, перечисления и удаления набора данных.
Он создается следующим образом со следующими типами, которые должны быть возвращены.
type TDataContext = {
loading: boolean,
getDataList: () => TData[],
addNewData : (data: TData) => Promise<boolean> ,
editData: (dataId: string, data: TData) => Promise<boolean>,
deleteData: (dataId: string) => Promise<boolean>,
}
const ADataContext = createContext<TGymClientDataContext>({
// How to initialize these here ?
})
export const ADataProvider: FC<{}> = ({children}) => {
const [loading, setLoading] = useState(true)
const [snapshot, loading, error] = useCollection<TDataStore>(db.collection(FIRESTORE_COLLECTIONS.DATA_COLLECTION), {});
const getDataList = async (): TData[] => {
if(loading == true) {
return []
}
if(typeof snapshot == "undefined"){
return []
}
return snapshot?.docs.map((item) => {
const fetched = item.data();
return ({
id: item.id,
doj: fetched.doj.toDate(),
firstName: fetched.firstName,
lastName: fetched.lastName,
})
})
}
// ... Function definitions
const values = {
loading,
getDataList,
addNewData,
editData,
deleteData,
}
return <ADataContext.Provider value={values}>
{children}
</ADataContext.Provider>
}
export const useDataHook = () => useContext(ADataContext)
- Я хотел бы знать, каков будет наилучший возможный способ передачи исходных данных в createContext ?
Я создаю это со следующим ожидаемым использованием
const {loading, getClientList, editClientData, addNewClient, deleteClientData} = useGymClient()
Ожидается, что функции просто вернут значение true или false в зависимости от того, будут ли операции успешными или нет.
Другой вопрос, что,
- Данные всегда должны быть перехвачены с помощью функции getDataList. является ли прямая передача переменной моментального снимка лучшим подходом ? В таком случае, что будет лучшим инициализатором для контекста создания