2017-03-01 1 views
3

Ich habe eine Referenz auf eine Komponente, die ich über eine styled component in meiner App konvertieren. Die Referenz wird verwendet, um auf die Eigenschaften offsetHeight und scrollHeight des Roh-HTML-Elements der Komponente zuzugreifen. Sobald ich diese Komponente in eine gestylte Komponente umgewandelt habe, zeigt der Verweis jetzt auf die formatierte Komponente anstelle des HTML-Rohelements und ich bin mir nicht sicher, wie ich auf das Basiselement verweisen soll. Kann das gemacht werden?React Styled Components - Wie auf Roh-HTML zugreifen

Beispiel:

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> 
    ); 
    } 
} 

Antwort

15

Wenn Sie ref an eine formatierte Komponente übergeben, erhalten Sie eine Referenz auf den styled-components Wrapper, nicht den DOM-Knoten. Um einen Verweis auf den tatsächlichen DOM-Knoten zu erhalten, übergeben Sie die innerRef-Prop. (Siehe the docs)

Dies ist, was Sie tun müssen:

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

Ja, das ist, was ich gesucht habe. Vielen Dank! – bgmaster

+0

Sie sind herzlich willkommen! – mxstbr

0

Ja, es kann getan werden. Sie können auf Roh-HTML mit ReactDOM.findDOMNode() zugreifen. Bedenken Sie jedoch, dass von dieser Methode abgeraten wird. Sie können mehr darüber in der referenzierten Seite lesen.

+0

Dank. Ich hatte den Eindruck, dass diese API veraltet war. Ist das nicht der Fall? – bgmaster

+0

Ich bin mir nicht sicher, aber das wird in der Dokumentation nicht erwähnt. Hast du eine Referenz? –

+0

Ich werde sehen, ob ich es finden und zu dir zurückkommen kann. Ich erinnere mich, dass es gesagt wurde, dass es entmutigt ist, wie Sie auch erwähnt haben. – bgmaster

Verwandte Themen