javascript - React Refs woth setState 给出了最大更新深度。
问题描述
Helo 伙计们,我试图使用 Refs 并this.setState
在他的内部给出,但它给出了:
超过最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况。React 限制了嵌套更新的数量以防止无限循环。
我怎么样:
ref = {
(anchor) => this.setState({
anchor
})
} >
但是当我使用:
ref = {
(anchor) => this.state.anchor = anchor
} >
有用..
在其他组件中,我this.setState
也使用它并且效果很好,有人为什么呢?
解决方案
ref
是 React 中的一个特殊道具。React 将在组件挂载ref
时使用 DOM 元素调用回调,并在组件卸载时调用它。 更新发生在生命周期钩子之前。所以在第一个例子中,当props 回调函数被执行时,在挂载之前你正在改变using ,所以组件由于状态改变再次开始挂载。现在您处于无限呼叫循环中。null
ref
componentDidMount
componentDidUpdate
ref
state
setState
但是在第二种情况下,你直接改变了state
在 React 中永远不应该做的事情,当你通过直接改变来更新状态时,state
它永远不会重新渲染。所以没有发生无限调用。它正常安装。
注意:ref
不是改变状态的地方。Refs
提供一种访问在 render 方法中创建的 DOM 节点或 React 元素的方法。根据文档。
希望有帮助。