Это скорее открытый вопрос, но мне было интересно, какой будет предпочтительный способ решения этой проблемы:
У меня есть компонент Tabs
, и я подумывал сделать несколько асинхронных c вызывает в родительском компоненте, а затем передает необходимые данные дочерним элементам следующим образом:
const ParentComponent = (props) => {
const res1 = useQuery(query1);
const res2 = useQuery(query2);
const res3 = useQuery(query3);
const res4 = useQuery(query4);
const res5 = useQuery(query5);
if (
res1.loading ||
res2.loading ||
res3.loading ||
res4.loading ||
res5.loading ||
) {
return <LoadingCircle />
}
// Vaguely this, not exact
return (
<Tabs>
<Tab>
<ChildComponent1 data={res1.data} />
</Tab>
<Tab>
<ChildComponent2 data={res1.data} otherData={res3.data}/>
</Tab>
<Tab>
<ChildComponent3 data={res4.data} />
</Tab>
<Tab>
<ChildComponent4 data={res2.data} otherData={res1.data} />
</Tab>
</Tabs>
)
}
Однако я думал, что начальная загрузка может быть немного большой, поскольку она получает большое количество data ... Желательно ли, чтобы каждый дочерний компонент выполнял свои собственные асинхронные вызовы c, несмотря на возможность повторного использования одного и того же запроса? Например:
const ChildComponent1 = () => {
const res1 = useQuery(getMember);
const res2 = useQuery(getProgress);
// ....
}
const ChildComponent2 = () => {
const res1 = useQuery(getMember);
const res2 = useQuery(getAppointment);
// ....
}
const ChildComponent3 = () => {
const res1 = useQuery(getOtherThing);
// ....
}
Таким образом, первоначально вызов будет менее затратным, но потребуется загрузка каждой вкладки. Я немного сбит с толку, какой метод будет лучше / предпочтительнее.
Мне интересно, как вы все подойдете к этому!