Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么当我记录我的反应状态时会得到两个响应,通过一个获取API请求设置状态?_Javascript_Reactjs_Fetch - Fatal编程技术网

Javascript 为什么当我记录我的反应状态时会得到两个响应,通过一个获取API请求设置状态?

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

我在React中从console.log得到两个状态响应。第一个是空的,第二个包含我试图打印的数据

[]空阵列

[{…}]0:{id:1,日期:2011-07-01T10:30:30.000Z,姓名:John} 长度:1 原型:Array0

我的代码如下所示:

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,我想知道为什么我不能直接访问它的值。嗯。感谢您解释这一点,以及为什么控制台日志被呈现两次——一次是在加载数据之前,一次是在加载数据之后。