是否在setState之后立即调用render?

时间:2018-02-20 08:16:30

标签: javascript reactjs

我有以下功能:

onSelectDepartment = (evt) => {
    const department = evt.target.value;
    const course = null;

    this.setState({ department, course });

    this.props.onChange({ name: 'department', value: department });
    this.props.onChange({ name: 'course', value: course });

    if (department) this.fetch(department);
};

问题是,在调用setState函数后,组件上的render函数会立即执行还是在函数调用完成后执行?

2 个答案:

答案 0 :(得分:1)

  

组件上的渲染函数将立即执行或之后执行   函数调用完成了吗?

没有人可以保证何时调用render函数,因为setState是异步的,当我们调用setState时意味着我们要求使用新的状态值来更新ui(请求调用render方法),但确切地说在什么时候会发生,我们永远不会知道。

看看react doc says about setState

  

setState()将对组件状态的更改排入队列并告知React   这个组件及其子组件需要重新呈现   更新状态。这是用于更新用户的主要方法   接口响应事件处理程序和服务器响应。

     

setState()视为请求而不是立即命令来更新组件。为了获得更好的感知性能,React可能会   延迟它,然后一次更新几个组件。的阵营   不保证立即应用状态更改。

检查此答案以获取有关setState的异步行为的更多详细信息:Why calling setState method doesn't mutate the state immediately?

答案 1 :(得分:0)

如果您希望仅在setState完成后才执行一些代码,则可以使用以下格式。

this.setState({
   flag: true
}, ()=> {
         // any code you want to execute only after the newState has taken effect. 
         })

这是确保所需代码段仅在新状态下运行的方式。