【发布时间】:2020-07-15 04:44:36
【问题描述】:
我从 grpahql 端点获取了一些数据。 在渲染之前我必须做一些计算。 但是这段代码在多次渲染这个组件后会导致浏览器冻结。 我想我可以把这段代码变成useEffect。 但我不确定为什么浏览器会冻结以及如何修改代码以清洁和运行良好。 如您所见,这段代码有些错误。 你能解释一下怎么做吗?
const StatusBar = () => {
const { data: curProgram_data } = useQuery(GET_CUR_PROGRAM);
const { data: programs_data, loading: programs_loading } = useQuery(GET_PROGRAMS);
const { data: tests_data, loading: tests_loading } = useQuery(GET_TESTS);
const { data: articles_data, loading: articles_loading } = useQuery(GET_ARTICLES);
if (programs_loading || tests_loading || articles_loading)
return <p>Loading ... </p>;
const { curProgram } = curProgram_data;
const { programs } = programs_data;
const totalTests = tests_data.tests;
const totalArticles = articles_data.articles;
var startYear = moment(totalTests[0].date, 'YYYY/MM/DD').format('YYYY');
var endYear = moment(totalTests[totalTests.length - 1].date, 'YYYY/MM/DD').format('YYYY');
var years = [];
for(var i = startYear; i <= endYear; i ++)
years.push(i);
for(var i = 0; i < programs.length; i ++) // Sort Programs by Date
for(var j = i + 1; j < programs.length; j ++) {
if(programs[i].tests[0].date > programs[j].tests[0].date) {
var temp;
temp = programs[i];
programs[i] = programs[j];
programs[j] = temp;
}
}
console.log("I think we have to turn all variables to state with useEffect");
var programsGroupedByYear = [];
var eachProgramLength = [];
var startYear = moment(programs[0].tests[0].date, 'YYYY/MM/DD').format('YYYY');
var endYear = moment(programs[programs.length - 1].tests[0].date, 'YYYY/MM/DD').format('YYYY');
for(i = 0; i < endYear - startYear + 1; i ++) {
programsGroupedByYear[i] = [];
eachProgramLength[i] = [];
}
var isNext = startYear;
var yearIt = 0;
for(i = 0; i < programs.length; i ++) { // Group Programs by Year
var year = moment(programs[i].tests[0].date, 'YYYY/MM/DD').format('YYYY');
if(year == isNext)
programsGroupedByYear[yearIt].push(programs[i]);
else {
isNext = year;
yearIt ++;
programsGroupedByYear[yearIt].push(programs[i]);
}
}
... ....
return (
<div>
<YearBar
groupLengths = {groupLengths}
curProgramPos = {curProgramPos}
years = {years}
totalArticles = {totalArticles}
/>
....
</div>
)
}
【问题讨论】:
-
此组件中的控制台日志调用不定式。为什么?
标签: reactjs graphql react-hooks