我想从渲染函数访问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)
并记录该值。但我必须将它保存到构造函数以将其传递给另一个组件。
问题是状态没有改变。
我做错了什么?
提前致谢
答案 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完成后才会呈现。