Javascript 为什么当我记录我的反应状态时会得到两个响应,通过一个获取API请求设置状态?
我在React中从console.log得到两个状态响应。第一个是空的,第二个包含我试图打印的数据 []空阵列 [{…}]0:{id:1,日期:2011-07-01T10:30:30.000Z,姓名:John} 长度:1 原型:Array0 我的代码如下所示:Javascript 为什么当我记录我的反应状态时会得到两个响应,通过一个获取API请求设置状态?,javascript,reactjs,fetch,Javascript,Reactjs,Fetch,我在React中从console.log得到两个状态响应。第一个是空的,第二个包含我试图打印的数据 []空阵列 [{…}]0:{id:1,日期:2011-07-01T10:30:30.000Z,姓名:John} 长度:1 原型:Array0 我的代码如下所示: constructor(props){ super(props); this.state = { session: [] } } componentDidMount(){ this.fet
constructor(props){
super(props);
this.state = {
session: []
}
}
componentDidMount(){
this.fetchSessionData();
}
fetchSessionData = () => {
fetch(`http://localhost:3000/sessions/${this.props.match.params.id}`)
.then(response => response.json())
.then(session => this.setState({session:session});
}
render()
{
console.log(this.state.session);
return(
<div>
<p>Hello world + {this.props.match.params.id}</p>
</div>
)
}
如果在我的响应中有多个javascript对象,我还会看到如下内容:
[]空阵列
[{…}]0:{id:1,日期:2018-11-01T10:30:30.000Z,姓名:John}
长度:1原型:阵列0
[{…}]0:{id:1,日期:2018-11-01T10:30:30.000Z,姓名:John},{id:
1,日期:2018-07-22T12:37:01.000Z,姓名:Steve},长度:2,
原型:Array0
诸如此类。我怀疑这与承诺或生命周期有关,但没有找到答案。此外,当我尝试访问类似于this.state.session.id的状态值时,它返回undefined。这是怎么回事 您的控制台日志位于render函数中,因此每当组件渲染或重新渲染时,它都会触发。这很正常。它在第一次加载时渲染,然后在获取数据和更新状态后重新渲染
此外,this.state.session是一个包含json对象的数组。因此,您必须编写如下内容。state.session[0]。id每次执行render方法时,您都会看到consoled语句 第一控制台:安装组件时 第二个控制台:组件更新/重新呈现时 组件何时更新? -当组件接收到任何新的inputsprops时 -当组件更新其自身上下文的状态时 -组件不更新状态,但调用forceUpdate 如果我多次执行setState,是否会打印n次?
-没有设置状态是异步操作,请批量执行。好的,这对我理解问题有很大帮助。我当时正看着一个数组,现在我知道在[0]中有json,我想知道为什么我不能直接访问它的值。嗯。感谢您解释这一点,以及为什么控制台日志被呈现两次——一次是在加载数据之前,一次是在加载数据之后。