#javascript #node.js #reactjs
#javascript #node.js #reactjs
Вопрос:
Следующий код выполняет запрос API и отображает все полученные индексы, что является ответом JSON.
Вместо рендеринга списка мне нужно вывести один индекс массива данных, полученный из ответа сервера:
class Test extends React.Component {
constructor(props) {
super(props)
this.state = {
data: []
}
}
//request to api
loadData() {
fetch('https://api.privatbank.ua/p24api/pubinfo?jsonamp;exchangeamp;coursid=5')
.then(response => response.json())
.then(data => {
this.setState({
data: data
})
})
.catch(err => console.error(this.props.url, err.toString()))
}
componentDidMount() {
this.loadData()
}
render() {
return (
//conclusion data
{
this.state.data.map((item) => {
return <div class = "mypanel" > currency: {
item.ccy
}
exchange: {
item.buy
} < /div>
})
}
)
React.render(document.getElementById('mypanel'));
}
}
export default Test;
Комментарии:
1. Не могли бы вы пояснить немного яснее, что вы подразумеваете под «выводом одного индекса массива данных, полученного из API». Возможно, вы имеете в виду длину массива данных?
2. Я имел в виду вывод определенного индекса массива вместо всего.
Ответ №1:
Я предполагаю, что вы хотите отобразить элемент, соответствующий определенному индексу, из списка элементов, полученных с сервера. Вы можете сделать это как:
<div class = "mypanel" >
currency: { this.state.data[index].ccy} exchange: {
this.state.data[index].buy
} < /div>
где ‘index’ — это значение индекса, которое вы хотите отобразить.
Ответ №2:
Если вы хотите отображать только определенные элементы в зависимости от некоторых условий, вы можете использовать функцию фильтра из массива и фильтровать свои элементы, как показано ниже.
this.state.data.filter(item=>{
return item.buy=== "buy"?true:false;
}).map((item) => {
return <div class = "mypanel" > currency: {
item.ccy
}
exchange: {
item.buy
} < /div>
})
Если вы хотите показать только определенное количество элементов, вы можете использовать цикл for или forEach и принимать только обязательное количество элементов. Вы можете написать отдельную функцию и вызвать то же самое, как показано ниже.
function ShowSome(noOfItemsToTake){
const items = [];
const data = this.state.data;
const noOfItems= noOfItemsToTake< data.length?noOfItemsToTake:data.length;
for (let i=0; i<noOfItems;i )
{
items.push(
<div class = "mypanel" > currency: {
data[i].ccy
}
exchange: {
data[i].buy
} < /div>)
}
return items;
}
render() {
//Showing first 5
return this.ShowSome(5);
}