#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. ваше решение не помогает. есть еще какие-нибудь попытки?