Как запросить ширину в пикселях элемента шириной 100% div в react.js?

Я новичок в реакции и уверен, что не единственный, кто задает этот вопрос. У меня есть div в моем компоненте шириной: 100%; Мне нужно рассчитать его ширину в пикселях. Как бы я это сделал?

Чтобы представить это с точки зрения моего фактического варианта использования, вот что я делаю: я создаю слайдер в реакции. У моего слайдера есть div с именем класса «слайд-держатель» внутри этого div, которые являются отдельными div для слайдов. Ползунок - это очень простой слайдер, и держатель слайда будет перемещаться по горизонтали на ширину одного слайда, чтобы перейти к следующему / предыдущему слайду.

Вот мой полный код - имейте в виду, что я все еще активно работаю над этим, поэтому он может иногда ломаться, но вы должны иметь представление о том, как это работает, я просто делаю основы, пока не реагирую, ничего особенного .

http://codepen.io/thewebtech/pen/JRXybb?editors=0110

    /*var React = require("react");
var ReactDOM = require('react-dom');*/
var Slide = React.createClass({
  render: function() {
    return (<div className="slide" style={{backgroundImage:'url(' + this.props.imgsrc + ')'}}>
        <div className="caption">{this.props.children}</div>
      </div>);
  }
});

var SliderControlButton = React.createClass({

  render: function() {
    var btnClasses="slider-control-button "+this.props.direction;

    return (
      <button className={btnClasses}>
        {this.props.direction}
      </button>
    );
  }
});

var SliderControls = React.createClass({
  render: function() {
    return (
      <div className="slider-controls">
        <SliderControlButton direction="left"/>         <SliderControlButton direction="right"/>
      </div>
    );
  }
});
var SliderHolder = React.createClass({
  getInitialState:function(){
    var setWidth= React.Children.count(this.props.children)* 200+"px";
    var setSlideWidth= setWidth / React.Children.count(this.props.children);
    return{width: setWidth,
           slideWidth: setSlideWidth

          }


  },
  render:function(){

    return (
    <div className="slide-holder" style={{width: this.state.width}}>
        {this.props.children}
        </div>
    )

  }

});

function renderChildren(props) {
  return React.Children.map(props.children, child => {
    if (child.type === Slide)
      return React.cloneElement(child, {
        name: props.name
      })
    else
      return child
  })
}


var Slider = React.createClass({
  render: function() {
    return (
      <div className="slider">
        <SliderControls/>
        <SliderHolder>
            <Slide imgsrc="http://jonmclarendesigns.com/wedding/wp-content/uploads/2016/09/DSC_4050.jpg">hello</Slide>
          <Slide imgsrc="http://jonmclarendesigns.com/wedding/wp-content/uploads/2016/09/DSC_3819.jpg"/>
        </SliderHolder>
      </div>
    );
  }
});

ReactDOM.render(<Slider/>, document.getElementById("app"));

person TheWebTech    schedule 18.09.2016    source источник


Ответы (1)


Я понимаю, что на самом деле я не отвечаю на ваш вопрос напрямую, но я думаю, что для фактического сценария использования, который вы описали, вам лучше использовать некоторые готовые инструменты.

response-css-transition-replace решает именно эту проблему. Все, что вам нужно сделать, это применить классы перехода CSS и отобразить нужный компонент слайда.

person Jake Haller-Roby    schedule 18.09.2016
comment
Я ценю, что вы указали мне на этот ресурс, он пригодится, если я в конечном итоге добавлю возможность заставлять его затухать и другие переходы, но похоже, что сделать это для имитации эффекта скольжения на самом деле сложнее, чем сделать это так, как я имел в виду. - person TheWebTech; 18.09.2016
comment
Свойство CSS translate отлично справляется со скольжением. Не стесняйтесь игнорировать, если вы хотите выращивать решение дома, но я действительно рекомендую использовать этот пакет. Обычно рекомендуется управлять переходами и анимацией в CSS, когда это возможно, а не делать их в javascript. - person Jake Haller-Roby; 18.09.2016