Визуализация данных ответа путем сопоставления с дочерним элементом html … с использованием реакции и состояния обновления

#javascript #json #reactjs

#javascript #json #reactjs

Вопрос:

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

Это функция поиска

  lookup = () => {
    console.log('Step 1. Smartystreets - Define Lookup.');
    let lookup = new Lookup();
    lookup.street = this.state.shippingAddress.addressLine1;
    lookup.street2 = this.state.shippingAddress.addressLine2;
    lookup.city = this.state.shippingAddress.city;
    lookup.state = this.state.shippingAddress.state;
    lookup.zipCode = this.state.shippingAddress.zipCode;
    lookup.match = 'strict';
    lookup.maxCandidates = 1;

    console.log('Step 2. Send the lookup to smartystreets.');
    client.send(lookup)
    .then((response) => {
      console.log('Step 3. Show the resulting candidate addresses:');
      console.dir(response);
      response.lookups[0].result.map(this.buildTextOutput);
    })
    .catch((response) => {
      console.warn(response);
    });
 }
 buildTextOutput = () => {
  const candidateOutput = document.getElementById("verifiedAddress");
  const outputElement = document.createElement('verifiedAddressResults');
  outputElement.innerHTML = candidate.deliveryLine1   '<br>'   candidate.lastLine;

  candidateOutput.appendChild(outputElement);
}  
}
  

Мне нужно вывести кандидата.deliveryLine1 candidate.lastLine как дружественный к реакции, чтобы я мог предоставить пользователю возможность выбрать выходной результат в качестве адреса и setState в качестве новых данных ответа… Я думаю, что я довольно близок… есть какая-нибудь помощь?

Ответ №1:

Во-первых, я бы рекомендовал избегать прямого манипулирования DOM с помощью таких методов, как .innerHTML — React хорошо справляется с настройкой и эффективным рендерингом вашей страницы, когда ее оставляют в покое, но может возникнуть проблема, если вы неожиданно измените DOM таким образом.

Что касается вашего вопроса, я бы сохранил ответ на состояние компонента, а затем сопоставил данные в строке следующим образом:

 // in lookup function
client.send(lookup)
    .then((response) => {
      console.log('Step 3. Show the resulting candidate addresses:');
      console.dir(response);
      this.setState({addresses: response.lookups[0].result})
    })

// in render function
{this.state.addresses.map((address) => {
    return (
        // Desired markup here
    )
})}
  

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

1. Это сработало! мой следующий вопрос был бы, если бы у меня был в ответе код из 4 символов для вывода различных возможных решений, скажем, например, code 1 = AABB (это привело бы к выводу — Вы забыли номер своей квартиры?) и т.д. и т.п. Как бы вы внедрили что-то подобное в react?

2. Звучит так, как будто вы хотели бы создать какое-то сопоставление между символами типа const responses = {AABB: 'Did you forget your apartment number'} . Если бы вы могли принять мой первоначальный ответ, я был бы признателен 🙂