React - 通过get request中的响应数据进行映射-为什么响应数据不显示?
React - Mapping through response data from get request-why response data is not displayed?
我是 React 的新手,我正在尝试显示从 get 中获得的响应数据 request.I 一直在查看多个类似的帖子,试图实现对其他人有效的方法,但对我来说没有任何效果。在我下面的代码中,我没有收到任何错误(设置状态似乎也有效)但没有显示任何内容,我不知道为什么。有任何想法吗?谢谢!
class Testing extends React.Component {
constructor(props) {
super(props);
this.state = {
name: []
};
this.getData = this.getData.bind(this)
}
componentDidMount() {
this.getData();
}
getData() {
axios.get('https://example.com)
.then(results => {
return results.data;
})
.then(res => {
let arr = res.items;
let test = [];
return arr.map(function(item) {
test.push(item);
})
this.setState({
name: test
});
})
}
render() {
const persons = this.state.name.map((item, i) => {
return
<div>
<h1> {item.name} </h1>
</div>
});
return
<div id = "layout-content" className = "layout-content-wrapper" >
<div className = "panel-list">
All: {persons}
</div>
</div>
}
}
更改渲染:
class Testing extends React.Component {
constructor(props) {
super(props);
this.state = {
name: []
};
this.getData = this.getData.bind(this)
}
componentDidMount() {
axios.get('https://example.com)
.then(results => {
return results.data;
})
.then(res => {
let arr = res.items;
let test = [];
return arr.map(function(item) {
test.push(item);
})
this.setState({
name: test
});
})
}
render() {
<div>
this.state.name ? this.state.name.map((item, i) => {
return (
<div>
<h1>{ item.name }</h1>
</div>
)
}) : null;
</div>
}
}
此处错误:
<div>
this.state.name ? this.state.name.map((item, i) => {
return (
^
<div>
<h1>{ item.name }</h1>
</div>
首先,将您的 getData
函数甚至整个请求逻辑移动到 componentWillMount
函数中。其次,将 render
函数更改为:
render() {
return (
<div>
this.state.name ? this.state.name.map((item, i) => {
return (
<div>
<h1>{ item.name }</h1>
</div>
)
}) : null;
</div>
)
}
您的代码存在的问题是您的 setState 从未被调用过。如果您查看 api 调用的最后一个 then 函数,您会发现 return 语句就在 setState 之前(即在 arr.map 处)。因此,您的代码永远不会到达 setState。删除 return 语句,它应该可以工作:
getData() {
axios.get('https://example.com)
.then(results => {
return results.data;
})
.then(res => {
let arr = res.items;
let test = [];
arr.map(function(item) {
test.push(item);
})
this.setState({
name: test
});
})
}
编辑::好的,尝试像这样
将你的渲染包在方括号中()
render() {
const persons = this.state.name.map((item, i) => {
return
(<div>
<h1> {item.name} </h1>
</div>);
});
return
(<div id = "layout-content" className = "layout-content-wrapper" >
<div className = "panel-list">
All: {persons}
</div>
</div>);
}
我是 React 的新手,我正在尝试显示从 get 中获得的响应数据 request.I 一直在查看多个类似的帖子,试图实现对其他人有效的方法,但对我来说没有任何效果。在我下面的代码中,我没有收到任何错误(设置状态似乎也有效)但没有显示任何内容,我不知道为什么。有任何想法吗?谢谢!
class Testing extends React.Component {
constructor(props) {
super(props);
this.state = {
name: []
};
this.getData = this.getData.bind(this)
}
componentDidMount() {
this.getData();
}
getData() {
axios.get('https://example.com)
.then(results => {
return results.data;
})
.then(res => {
let arr = res.items;
let test = [];
return arr.map(function(item) {
test.push(item);
})
this.setState({
name: test
});
})
}
render() {
const persons = this.state.name.map((item, i) => {
return
<div>
<h1> {item.name} </h1>
</div>
});
return
<div id = "layout-content" className = "layout-content-wrapper" >
<div className = "panel-list">
All: {persons}
</div>
</div>
}
}
更改渲染:
class Testing extends React.Component {
constructor(props) {
super(props);
this.state = {
name: []
};
this.getData = this.getData.bind(this)
}
componentDidMount() {
axios.get('https://example.com)
.then(results => {
return results.data;
})
.then(res => {
let arr = res.items;
let test = [];
return arr.map(function(item) {
test.push(item);
})
this.setState({
name: test
});
})
}
render() {
<div>
this.state.name ? this.state.name.map((item, i) => {
return (
<div>
<h1>{ item.name }</h1>
</div>
)
}) : null;
</div>
}
}
此处错误:
<div>
this.state.name ? this.state.name.map((item, i) => {
return (
^
<div>
<h1>{ item.name }</h1>
</div>
首先,将您的 getData
函数甚至整个请求逻辑移动到 componentWillMount
函数中。其次,将 render
函数更改为:
render() {
return (
<div>
this.state.name ? this.state.name.map((item, i) => {
return (
<div>
<h1>{ item.name }</h1>
</div>
)
}) : null;
</div>
)
}
您的代码存在的问题是您的 setState 从未被调用过。如果您查看 api 调用的最后一个 then 函数,您会发现 return 语句就在 setState 之前(即在 arr.map 处)。因此,您的代码永远不会到达 setState。删除 return 语句,它应该可以工作:
getData() {
axios.get('https://example.com)
.then(results => {
return results.data;
})
.then(res => {
let arr = res.items;
let test = [];
arr.map(function(item) {
test.push(item);
})
this.setState({
name: test
});
})
}
编辑::好的,尝试像这样
将你的渲染包在方括号中()
render() {
const persons = this.state.name.map((item, i) => {
return
(<div>
<h1> {item.name} </h1>
</div>);
});
return
(<div id = "layout-content" className = "layout-content-wrapper" >
<div className = "panel-list">
All: {persons}
</div>
</div>);
}