未在componentDidMount

时间:2017-07-08 13:18:31

标签: javascript reactjs state

我想从渲染函数访问refs,并将其设置为状态。

这是我的代码:

export default class App extends Component {
    constructor(props) {
        super(); 
            this.arr = this.generateTimelineArray();
            this.state = {el : 'empty'};
        }
    componentDidMount() {
        this.setState({
          el: this.refs.el
        });
        console.log(this.state.el)
    }
render() {
    return (
      <div  className="timeline__container--line" ref="el" ></div>
    ); 
  }

我可以console.log(this.refs.el)并记录该值。但我必须将它保存到构造函数以将其传递给另一个组件。

问题是状态没有改变。

我做错了什么?

提前致谢

2 个答案:

答案 0 :(得分:5)

setState是异步的。 Docs。如果要查看更新的状态,请使用回调。

componentDidMount() {
        this.setState({
          el: this.refs.el
        }, () => console.log(this.state.el));
    }

答案 1 :(得分:0)

就像Yury所说,this.setState是异步的。除了回调函数之外,您还可以使用布尔状态变量并在render中检查它:

export default class App extends Component {
    constructor(props) {
        super(); 
            this.arr = this.generateTimelineArray();
            this.state = {el : 'empty', flag : true};
        }
    componentDidMount() {
        this.setState({
          el: this.refs.el,
          flag : false
        });
        console.log(this.state.el)
    }
render() {
    return (
      this.state.flag == false &&
      <div  className="timeline__container--line" ref="el" ></div>
    ); 
  }

现在只有在异步setState完成后才会呈现。