Как отобразить список JSON в браузере в компоненте reactjs?

#javascript #json #reactjs

#javascript #json #reactjs

Вопрос:

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

 import React from 'react';

export default class peopleList extends React.Component {
    state = {
        values: []
    }
    componentDidMount() {
       fetch('http://localhost:3005/people')
        .then(function(res) {
            return res.json();
        }).then(function(json) {
            this.setState({
               values: json
            })
        });
    }
    render(){
        return <div className="drop-down">
            <p>I would like to render json list on the browser </p>
              <select>{
                 this.state.values.map((obj) => {
                     return <option value={obj.id}>{obj.name}</option>
                 })
              }</select>
            </div>;
    }
}
 

Желаемый результат:

Я создал простую рамку панели, в которую я хочу поместить данные списка json. для простоты я просто хочу пока отображать каждую строку. Как я могу это сделать? может кто-нибудь указать мне, как сделать это более эффективно? Спасибо

введите описание изображения здесь

в этом прикрепленном выводе я использовал пример фрейма панели, в котором я хочу поместить свой список json на панель. Хотя я признаю, что данные настолько разные.

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

1. В чем именно ваша проблема? Неужели вы не в состоянии получить какой-либо результат? И если да, то какие ошибки вы получаете.

2. @SteveK вышеуказанный компонент не отображал данные json в браузере, я не понимаю, почему. Есть какие-нибудь идеи?

3. Вы получаете какие-либо ошибки консоли?

4. @SteveK да, я запустил мой компонент выше и не отображал вывод списка json в браузере. Я не знаю почему. Есть какие-нибудь идеи?

5. Да, у меня есть некоторые идеи, но на всякий случай я хочу знать, какие ошибки вы получаете в консоли вашего браузера. Знаете ли вы, как использовать консоль javascript разработчика в вашем браузере? Это выдаст вам все ошибки, которые произошли. И если есть какие-то ошибки, какие вы получаете.

Ответ №1:

Не видя точно, что здесь происходит, и вы не публикуете фактический код и вывод json, который вы используете, все, что я могу сделать, это догадаться, в чем проблема.

Во-первых, опубликованный вами вывод json отличается от значений, которые вы пытаетесь получить. В опубликованном вами выводе json нет имени или значения идентификатора.

Далее в вашей componentDidMount() функции лучше всего использовать функцию arrow для привязки к классу.

Следующие компоненты react должны иметь заглавные буквы для первой буквы имени компонентов, поэтому <peopleList/> они будут восприниматься как html-элемент, а не как компонент react. Если вы не получаете никаких ошибок в своей консоли, это может быть проблемой.

И тогда вы, возможно, не получаете правильный json из своего api или вообще не получаете json или не регистрируете его в состоянии. Попробуйте записать состояние в консоль после рендеринга и посмотреть, был ли json отправлен в значения в вашем состоянии. Если это так, убедитесь, что вы получаете правильную разметку json и что ваши значения верны.

Есть несколько других, которые могут быть проблемой, но это основные. Я собрал пример, который вы можете увидеть по следующей ссылке Json Output Example CodeSandbox убедитесь, что вы посетили этот пример и сравнили с вашим кодом. Слева откройте компонент PeopleList.

Для вашего варианта использования я бы установил в вашем родительском компоненте список пользователей как <PeopleList/> , и тогда ваш компонент будет выглядеть примерно так:

 import React from "react";

export default class PeopleList extends React.Component {
  state = {
    values: []
  };
  componentDidMount() {
    fetch("http://localhost:3005/people")
      .then(res => res.json())
      .then(json => {
        this.setState({
          values: json
        });
      });
  }
  render() {
    return (
      <div className="drop-down">
        <p>I would like to render json list on the browser </p>
        <select>
          {this.state.values.map(obj => {
            return (
              <option key={obj.id} value={obj.id}>
                {obj.name}
              </option>
            );
          })}
        </select>
      </div>
    );
  }
}
 

Кроме того, если вы используете вывод json, который вы опубликовали выше, вы должны использовать следующее:

 <option key={obj.uin} value={obj.uin}>
  {obj.studentInfo.FirstName}
</option>
 

Если у вас есть какие-либо другие вопросы, дайте мне знать.

Ответ №2:

В примере, который вы опубликовали, вы визуализируете a select с помощью группы options с неопределенными значениями. Похоже, это не соответствует вашим данным или вашему вопросу.

Используя предоставленные вами данные, вот элементарный способ перебора результатов и их печати, а также перебора каждого реквизита в объектах.

https://jsfiddle.net/reergymerej/kmL84hvy/1/

Если ваша реальная цель — просто распечатать данные в компоненте для быстрой отладки, вы можете сделать что-то вроде этого.

 render() {
  return (
    <div>{JSON.stringify(this.props)}</div>
  )
}
 

Это дешевый способ увидеть, какие реквизиты получает ваш компонент. Вместо этого вам следует ознакомиться с инструментами React Dev и научиться изучать компоненты с большей гибкостью. За исключением этого, хорошая console.log отладка ole — это костыль, который мы все используем здесь и там.

Если вы хотите получить лучшую и быструю помощь, попробуйте уточнить свои результаты. Добавьте снимки экрана и попытайтесь объяснить, что вы видите и чем это отличается от того, что вы ожидаете. Для устранения неполадок обычно лучше больше информации, чем меньше.

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

1. результат вашего ответа — это именно то, чего я хочу. Вместо явного использования списка json в компоненте я хочу использовать список json, который извлекается из API. Как я могу это сделать?

2. Это одно и то же, просто прочтите это this.state . Мой пример просто пропускает эту часть. Я не видел ничего плохого в том, как вы извлекаете данные.

Ответ №3:

Не похоже, что эти данные содержат то, что вы запрашиваете (идентификатор и имя). Я немного новичок в JSX, но я думаю, что то, что вы, возможно, ищете, приведено ниже в виде обновления синтаксиса и обновления обозначения свойств.

 return (
        <div className="drop-down">
        <p>I would like to render json list on the browser </p>
          <select>
           {this.state.values.map(obj => (
               <option value={obj.uin}>{obj.studentInfo.firstName}</option>
            ))}
          </select>
        </div>;
);
 

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

1. ваше решение не помогает. есть еще какие-нибудь попытки?