Я успешно создал два контекста, по одному для каждого из двух различных модулей, которые я построил в React, используя функциональные компоненты и React Hooks.Стало очевидным, что существуют общие данные, которые требуются большинству / всем компонентам, которые я буду создавать.Вместо того чтобы делать вызовы GET с каждым компонентом верхнего уровня, я хочу реорганизовать эти общие данные и сохранить их в AppContext
.Эти данные никогда не изменятся в сеансе для каждого пользователя.
Сначала я попытался поместить весь код заполнения непосредственно в AppContext
, но это не сработало, поскольку контекст еще не был инициализирован.Итак, я создал компонент с именем InitAppData
и обернул его следующим образом в App.js
:
<AppContext>
<Router />
<InitAppData />
</AppContext>
InitAppData
сам по себе довольно стандартен:
const InitAppData = () => {
const { appStore,
updateAppStore } = useContext(AppContext);
// Populate the AWS Auth Token
useGetAwsAuthToken();
// Retrieve the Roles with a GET useFetch call
const [{ data: rolesData,
status: rolesStatus,
isLoading: rolesIsLoading,
isError: rolesIsError }] = useFetch(
`${API_ROOT()}acct_mgmt/roles`,
{ }
);
// Process & populate the fetched Roles
useEffect(() => {
if (!rolesIsLoading && rolesStatus === 200) {
appStore.roles = rolesData.roles;
}
}, [rolesIsLoading, rolesStatus]);
// ... more population to go here ...
return (null);
}
export default InitAppData;
Все вроде быполучать правильно.Я понимаю, что это, возможно, немного нетрадиционно, но оно следует той же схеме, которую я использовал ранее для сопряжения контекста с компонентом, посредством чего последний взаимодействует с первым.
Интересует мнение каждого об этом подходе,Если есть лучшая практика, мне всегда интересно учиться!