Javascript 将数据从API提取到状态
我在App.js中有以下内容Javascript 将数据从API提取到状态,javascript,reactjs,api,Javascript,Reactjs,Api,我在App.js中有以下内容 constructor(props){ super(props) this.state = {data: 'false'}; } componentDidMount(){ this._getData(); } _getData = () => { const url = 'http://localhost:8888/chats'; fetch(url, { crede
constructor(props){
super(props)
this.state = {data: 'false'};
}
componentDidMount(){
this._getData();
}
_getData = () => {
const url = 'http://localhost:8888/chats';
fetch(url, { credentials: 'include' })
.then((resp) => resp.json())
.then(json => this.setState({ data: json.chats }))
}
render() {
return (
<div className="App">
{
this.state.chats &&
this.state.chats.map( (buddy, key) =>
<div key={key}>
{buddy}
</div>
)}
<Chat />
</div>
)
}
import React, { Component } from 'react';
class Chat extends Component {
render() {
console.log(this.props);
return (
<div className="App">
MY Chat
</div>
);
}
}
export default Chat;
但我得到的是空数组和警告,如下所示:
连接到
ws://localhost:3000/sockjs节点/321/uglf2ovt/websocket被中断
当页面正在加载时
我不确定是什么问题,为什么变量是空的
感谢您的时间。对于无法获取任何数据时出现的问题,请在构造函数中绑定您的方法
constructor(props) {
super(props)
this.state = { chats: 'false'};
this._getData = this._getData.bind(this);
}
此外,您没有向聊天组件传递任何道具。例如,您可以执行以下操作:
render() {
return (
<div className="App">
{
this.state.chats &&
this.state.chats.map( (buddy, key) =>
<div key={key}>
{buddy}
</div>
)}
<Chat chats={this.state.chats} />
</div>
);
}
对于无法获取任何数据的问题,请在构造函数中绑定您的方法
constructor(props) {
super(props)
this.state = { chats: 'false'};
this._getData = this._getData.bind(this);
}
此外,您没有向聊天组件传递任何道具。例如,您可以执行以下操作:
render() {
return (
<div className="App">
{
this.state.chats &&
this.state.chats.map( (buddy, key) =>
<div key={key}>
{buddy}
</div>
)}
<Chat chats={this.state.chats} />
</div>
);
}
非常感谢,这解决了问题。但是我要买一个新的。我在控制台
对象{chats:undefined}
中得到这个。知道为什么会发生这种情况吗?因为您正在将获取数据保存在名为data in state的属性中,然后尝试从名为chats的状态打印属性。非常感谢,你为我节省了数小时的研究时间我知道你已经回答了这个问题,但是如果你告诉我如何解决这个问题,我会非常感激,因为你已经完成了代码。更改后,我得到的对象作为React子对象无效(找到:具有键{buddy,lastMessage,timestamp}的对象)。如果要呈现子对象集合,请改用数组。in div(在App.js:38)in div(在App.js:34)in App(在index.js:6)
。我需要更多的钥匙吗?如果是,怎么做?再次感谢。如果您不想询问是否可以理解:)请在映射this.state.chats之前先执行console.log,然后检查是否正在尝试循环数组。非常感谢,这解决了问题。但是我要买一个新的。我在控制台对象{chats:undefined}
中得到这个。知道为什么会发生这种情况吗?因为您正在将获取数据保存在名为data in state的属性中,然后尝试从名为chats的状态打印属性。非常感谢,你为我节省了数小时的研究时间我知道你已经回答了这个问题,但是如果你告诉我如何解决这个问题,我会非常感激,因为你已经完成了代码。更改后,我得到的对象作为React子对象无效(找到:具有键{buddy,lastMessage,timestamp}的对象)。如果要呈现子对象集合,请改用数组。in div(在App.js:38)in div(在App.js:34)in App(在index.js:6)
。我需要更多的钥匙吗?如果是,怎么做?再次感谢。如果您不想询问是否可以理解:)在映射this.state.chats之前先做一个console.log,并检查您是否正在尝试循环数组。您的状态有一个名为data
的属性,当fetch
返回时,您将保存该数据
属性。但是在render()
上,您使用this.state.chats
而不是this.state.data
。您的状态有一个名为data
的属性,当fetch
返回时,您可以保存该数据
属性。但是在render()
上,您使用this.state.chats
而不是this.state.data
。
class Chat extends Component {
render() {
console.log(this.props); // Here you will have an object like { chats: [data] }
return (
<div className="App">
MY Chat
</div>
);
}
}
_getData = () => {
const url = 'http://localhost:8888/chats';
fetch(url, { credentials: 'include' })
.then((resp) => resp.json())
.then(json => this.setState({ chats: json.chats }))
}