9

我在我的应用程序中转换为样式化组件的组件上有一个 ref。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>
    );
  }
}
4

2 回答 2

24

传递ref给样式组件将为您提供styled-components包装器的引用,而不是 DOM 节点。要获得对实际 DOM 节点的引用,请传递 innerRef 属性。(见文档

这是你需要做的:

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>
    );
  }
}
于 2017-03-01T13:28:35.677 回答
0

是的,它可以做到。您可以使用ReactDOM.findDOMNode(). 但是,请记住,不鼓励使用此方法。您可以在参考页面中阅读有关此内容的更多信息。

于 2017-03-01T11:40:04.607 回答