2016-03-10 4 views
3

У меня есть 4 столбца, ни одна из которых не установлена, и мне нужно найти высоту этих столбцов, чтобы можно было установить высоту самого большого столбца для остальных трех. Как я могу сделать это с помощью React и не использовать css minHeight?Получите высоту компонента в реале

Я новичок в реактиве и ближайший вопрос, который я нашел здесь, был ReactJS get rendered component height.

Также я нашел ссылку this, в которой говорится, что это можно сделать, получив DOMNode и используя Ref, но я не добился успеха.

ответ

3

Вы можете использовать обратный вызов ref и получить доступ к DOMNode внутри него.

class Example extends React.Component { 

    constructor(props) { 
     super(props); 
     this.state = { 
      height: null 
     }; 
     this.columns = ['hello', 
         'this is a bit more text', 
         'this is a bit more text ... and even more']; 
    } 

    render(){ 
     return <div ref={(node) => this.calcHeight(node)}> 
       { 
        this.columns.map((column) => { 
         return <div style={{height: this.state.height}}>{column}</div> 
        }) 
       } 
       </div>; 
    } 
    calcHeight(node) { 
     if (node && !this.state.height) { 
       this.setState({ 
        height: node.offsetHeight 
       }); 
     } 
    } 
} 

React.render(<Example />, document.getElementById('container')); 

Рабочий пример на jsfiddle: http://jsfiddle.net/vxub45kx/4/

Также смотрите здесь: https://facebook.github.io/react/docs/more-about-refs.html

+0

Благодаря @Richard Rutsche. Столбцы, о которых я упоминал, были на самом деле обычными компонентами, и я не мог полностью реализовать то, что вы предложили, но это дало мне полезные указатели. На данный момент я просто использовал clientHeight из DOMNode и должен был использовать forceUpdate, чтобы он работал, хотя ссылка [this] (https://facebook.github.io/react/docs/component-api.html#forceupdate) говорит, что это не рекомендуется использовать forceUpdate. Наверное, мне есть чему поучиться, прежде чем я пойму все титры о Реактике. –

+0

@Kshitij Да, это так, 'forceUpdate' не является хорошим решением в большинстве случаев. Где вы выбираете clientHeight и используете 'forceUpdate'? Внутри столбцов? Возможно, вы можете получить его в 'componentDidMount' родительского компонента и передать его в качестве опоры для столбцов. –

+2

Этот код, похоже, имеет большую проблему: он запускает состояние набора внутри цикла рендеринга –

Смежные вопросы