在现有状态转换期间无法更新(例如在`render`或其他组件的构造函数中)

时间:2018-02-09 01:59:51

标签: reactjs derbyjs racerjs

在下面的代码中,_updateQID方法是由另一个组件发出事件'Questions.updateHeader'时触发的。当发出事件并触发_updateQID时,我在控制台中得到以下警告:

  

警告:forceUpdate(...):在现有状态期间无法更新   转换(例如在render或其他组件内   构造函数)。渲染方法应该是道具的纯函数   州;构造函数的副作用是反模式,但可以移动   到componentWillMount

import React, { Component } from 'react'
import { subscribe, model } from '~/lib'
import { ContextMenu } from 'project-components'
import _ from 'lodash'
import EventEmitter from 'eventemitter3'

import './Headers.styl'



class Headers extends React.Component {
    constructor (props) {
        super(props)
        this.ee = new EventEmitter()
        this._updateQID = this._updateQID.bind(this)
    }

  componentDidMount () {
    model.on('Questions.updateHeader', this._updateQID.bind(this))
  }

  componentWillUnmount () {
    model.removeListener('Questions.updateHeader', this._updateQID.bind(this))
  }


 _updateQID = () =>{
     this.forceUpdate()
  }


  render () {
    return (<div className="header">DUMMY TEST FOR HEADER</div>)
  }
}

export default Headers

请帮忙

1 个答案:

答案 0 :(得分:2)

好的,我们解决了......我们触发事件强制更新Headers组件来自另一个组件的render方法....将它放入componentDidUpdate而不是渲染警告已经消失......