#reactjs
Вопрос:
Сталкиваюсь с проблемой, когда у меня есть «оператор if», который отображает часть оператора else примерно за полсекунды до фактического соответствия первой части оператора. Как я могу заставить его отображать только то, что ему соответствует?
Например, первая часть оператора if и никогда не показывайте условие else оператора if. В случае кода ниже, когда браузер загружает компонент, он показывает «Это не технический отчет» примерно на полсекунды, затем исчезает и появляется «Это технический отчет». Когда это делается по-другому, первая часть оператора if никогда не появляется, и появляется только раздел else. Эта проблема возникает только в том случае, если совпадает первое условие. Код Ниже:
import React, { useState, useEffect } from "react";
import "./App.css";
import axios from "axios";
import { useParams } from "react-router-dom";
function ViewReport(props) {
if (Report.InterviewType === "Technical") {
return (
<div>
<h1>This is a Technical report</h1>
</div>
);
} else {
return (
<div>
<h1>This is not a Technical report</h1>
</div>
);
}
}
export default ViewReport;
Комментарии:
1. Чтобы решить эту проблему, вы можете добавить состояние загрузки или вернуть значение null, пока
Report.InterviewType
оно пустое.
Ответ №1:
Это происходит потому, что изначально загрузка Report
объекта занимает некоторое время, и в результате if
условие не выполняется. Поэтому вы можете проверить Report.InterviewType
, существует ли он.
import React, { useState, useEffect } from "react";
import "./App.css";
import axios from "axios";
import { useParams } from "react-router-dom";
function ViewReport(props) {
if (Report.InterviewType === "Technical") {
return (
<div>
<h1>This is a Technical report</h1>
</div>
);
} else if(Report.InterviewType) {
return (
<div>
<h1>This is not a Technical report</h1>
</div>
);
}
}
export default ViewReport;
В этом случае я считаю, что начальное значение Report.InterviewType
равно undefined
или null
. Если он не равен нулю, то вы должны указать соответствующее начальное значение для else if
проверки. Допустим , начальное значение равно x
, тогда оно будет следующим.
else if(Report.InterviewType === x){ ... }
Комментарии:
1. Спасибо за ваш ответ. Попытался добавить
Report.InterviewType
, как вы упомянули, но затем я получил сообщение об ошибке без возврата, так как оба условия не выполнились. Однако вы были правы, что это было связано с периодом загрузки во время извлечения данных API. Вероятно, это моя вина, так как я не предоставил полный код в исходном вопросе. Спасибо за совет, теперь он работает.
Ответ №2:
Благодаря @kavinduvlndika и @junaidfaryad я смог понять, почему возникла проблема, и я просто добавил пустое значение в качестве третьего условия в операторе if. Это позволяет создать промежуточную точку, пока API извлекает данные.
import React, { useState, useEffect } from "react";
import "./App.css";
import axios from "axios";
import { useParams } from "react-router-dom";
function ViewReport(props) {
if (Report.InterviewType === "Technical") {
return (
<div>
<h1>This is a Technical Interview</h1>
</div>
);
} else if (Report.InterviewType === "LeadershipPrinciples") {
return (
<div>
<h1>This is not a Technical Interview</h1>
</div>
);
} else {
return <div></div>;
}
}