javascript - React ref 嵌套组件
问题描述
我遇到了一个我不知道如何“正确”解决的问题。
我有两个组件,我们称它们为parent
和child
。
child
组件是通过调用创建它的函数来“生成”的,我们称之为这个函数child creator
。
parent
组件有一个按钮,它显示/隐藏,child
但也假设.focus()
HTML dom 节点是子节点。现在我通过状态实现了显示/隐藏,但我不知道如何将 javascript 应用.focus()
到孩子的 HTML dom 节点上。
还有一个小问题......child
组件正在通过调用一个普通的旧javascript函数来“生成”和“返回”,让我们称之为createChild
。
这是因为子组件需要根据传递的参数有很大不同,但是,它还需要在整个应用程序中重用,因此createChild
函数确保所有child
组件都相同,给定相同的输入。
我尝试传递ref
给创建者,但是由于ref
不是道具,因此无法访问。什么是正确的方法来“抓住”孩子的 dom 节点以便在.focus()
单击按钮时,因为我无法通过 a ref
?
解决方案
是的,child ref 是可访问的,因为它是真实 DOM 的一部分。我用两个嵌套组件做了一个简单的例子,看看:
class Parent extends React.Component {
focusRef(ref) {
ref.focus();
}
render() {
return <Child focusRef={this.focusRef} />
}
};
class Child extends React.Component {
render() {
return (
<button
ref={childRef => this.childRef = childRef}
onMouseEnter={() => this.props.focusRef(this.childRef)}
>
When mouse enters, i get focused
</button>
);
}
}
ReactDOM.render(
<Parent />,
document.getElementById("root")
);
*:focus {
outline: 2px solid red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root" />
另外,我强烈建议您进一步阅读react docs:
推荐阅读
- performance - netflix.zuul - org.apache.http.impl.client.CloseableHttpClient:execute - 高响应时间的原因?
- java - 每次调用方法写入 Excel 文件时,如何添加一行?
- sql - Oracle SQL 中的“缺少右括号”
- android - RecyclerView 在 Fragment 中滑动删除
- c++ - 无法将参数传递给 boost::thread 构造函数
- c++ - 如何初始化指向指针数组的指针?
- python - 使用装饰器进行 try/except 管理
- flutter - 如何使文本字段的值居中(颤振)
- html - Django html页面不允许发布多个项目
- python - 如何将标签添加到具有多个变量的散点图?