Всем привет.
Мне с бекенда приходит такой объект:
const data = {
q_lang: {value: 1},
q_sex: {value: 2},
q_height: {value: "170cm"}
}
Мне надо отрендерить данные по типу:
Language - English
Sex - Male
Height - 170cm
Как я пробовал решить:
Сделать пресет данных -
const profileTitles = [
{
title: "Language of questions",
key: "q_lang",
dataByValue: [
{ value: 1, label: "English" },
{ value: 2, label: "Swedish" }
]
},
{
title: "Sex",
key: "q_sex",
dataByValue: [{ value: 1, label: "Male" }, { value: 2, label: "Female" }]
},
{ title: "Height", key: "q_height" }
];
И потом ф-цию для рендеринга
renderProfileData = testingReducer => {
return profileTitles.map((element, index) => {
const questionValue = get(testingReducer, `${element.key}.value`); // get с lodash
let labelValue; // нужный нам label для рендеринга
if (element.hasOwnProperty("dataByValue")) {
const filteredDataByQuestionValue = element.dataByValue.filter(
el => el.value === questionValue
); // фильтрация по value
labelValue = filteredDataByQuestionValue[0].label;
} else {
labelValue = questionValue;
}
return (
<div className="profile-data">
<span>{element.title}</span>
<span>{labelValue}</span>
</div>
);
});
};
Вроде все работает, но при первоначальном рендеринге на 2-3 секунды вылетает красное окно с текстом
can not read label of undefined
, потом все норм рендериться
Вопросы:- Как можно исправить первоначальную ошибку?
- Нормальный ли подход я выбрал и читабельная ли функция? TLDR: Норм ли код?:)