Как получить это значение в переменной и использовать его в условном выражении в React?

#javascript #reactjs #typescript #jsx

Вопрос:

Я был бы признателен за любую помощь в том, чтобы разобраться в этом. В приведенном ниже коде я хотел бы взять значения между ` из диапазона и присвоить их переменной, чтобы иметь следующую логику:

 ${research.data.codesRelated[1].code} === undefined 
  ? ${research.data.description} 
  : ${research.data.codesRelated[1].code} ${research.data.description}
 

Как я могу это сделать? Это кажется таким простым, но я не мог разобраться в этом, не знаю, где разместить константу и условный рендеринг внутри кода и заставить его работать. Всем заранее.

Код приведен ниже:

 const Research: FC<ResearchProps> = memo(
  ({ research, hideLabel = false, intl }) => (
    <div className="section research">
       <div className="section__value" id="container-research-value">
        <div className="research-info">
          <div className="description" id="element-research-description">
            <PopoverWrapper
              id="element-research-description-tooltip"
              trigger="hover"
              placement="top"
              speaker={<span className="text-tooltip">{research.data.description}</span>}
            >
              **<span>{`${research.data.codesRelated[1].code} ${research.data.description}`}</span>**
            </PopoverWrapper>
          </div>
 

Комментарии:

1. Вы могли бы просто положить его туда, хотя я бы этого не сделал-лучше вытащить струну до рендеринга.

Ответ №1:

Вы можете попробовать это

 const Research: FC<ResearchProps> = memo(
  ({ research, hideLabel = false, intl }) => (
    <div className="section research">
       <div className="section__value" id="container-research-value">
        <div className="research-info">
          <div className="description" id="element-research-description">
            <PopoverWrapper
              id="element-research-description-tooltip"
              trigger="hover"
              placement="top"
              speaker={<span className="text-tooltip">{research.data.description}</span>}
            >
              <span>{research.data.codesRelated[1].code === undefined ?
                        research.data.description
                      : <>
                       {research.data.codesRelated[1].code} {research.data.description}
                      </>}
              </span>
            </PopoverWrapper>
          </div> 

Комментарии:

1. Ваш фрагмент кода не запускается, Uncaught SyntaxError: Missing initializer in const declaration

Ответ №2:

Как уже упоминалось, вы можете использовать тернарный оператор.

Вы можете использовать простой хак: условный рендеринг для кода с пробелом в конце шаблона строки.

 <span>
{research.data.codesRelated[1].code amp;amp; `${research.data.codesRelated[1].code} `}
{`${research.data.description}`}
</span>
 

Но лучший способ создать внешнюю функцию для построения этой строки. И ваш рендеринг будет таким:

 <span>
{buildResearchDescription(research.data)}
</span>
 

Комментарии:

1. Спасибо за ответ, но, похоже, это не соответствует действительности, если research.data.codesRelated[1].код === не определен

2. const research = { данные: { описание: «Некоторое описание», связанное с кодом: [{}, {}] }, } С этой структурой данных она работает должным образом. Внутри фигурных скобок в jsx находится просто код javascript.