我在我的应用中转换为styled component的组件。 ref用于访问组件的原始html元素上的offsetHeight和scrollHeight属性。一旦我将这个组件切换到样式组件,ref现在指向样式组件而不是原始html元素,我不确定如何引用基本元素。可以这样做吗?
示例:
const TextArea = styled.textarea`
display: block;
margin: 0 0 0 18%;
padding: 4px 6px;
width: 64%;
font-size: 1rem;
color: #111;`;
export default class Input extends Component {
componentDidMount() {
const height = this.textInput.scrollHeight;
// do something....
}
render() {
return (
<div>
<TextArea
ref={(input) => this.textInput = input}
></TextArea>
</div>
);
}
}
答案 0 :(得分:19)
将ref
传递给样式化组件将为您提供styled-components
包装器的引用,而不是DOM节点。要获得实际DOM节点的参考传递innerRef prop 。 (见the docs)
这是你需要做的:
const TextArea = styled.textarea``;
export default class Input extends Component {
componentDidMount() {
const height = this.textInput.scrollHeight;
// do something....
}
render() {
return (
<div>
<TextArea
innerRef={(input) => this.textInput = input}
></TextArea>
</div>
);
}
}
答案 1 :(得分:0)
是的,可以做到。您可以使用ReactDOM.findDOMNode()
访问原始html。但是,请记住不鼓励使用这种方法。您可以在引用的页面中阅读更多相关信息。