JavaScript компонента не выполняется при маршрутизации с маршрутизатором React - PullRequest
0 голосов
/ 24 августа 2018

Я работаю над своим первым проектом React.Мне нужно стилизовать некоторые части с помощью JS, потому что я зависим от содержания.Я вызываю функцию JS из компонентов componentDidMount() для $(document).ready() JQuery, потому что иначе она не найдет узлы для стиля.

Когда я вхожу на страницу или обновляю, стилизация работает, как планировалось, нокогда я использую роутер <Link> или <NavLink>, JS не загружается.

Есть ли способ заставить его работать?

class About extends React.Component {
  constructor() {
    super();
  }

  componentDidMount() {
      $(document).ready( function () {
        indentation($('.page__content__career').children(), 85);
        indentation($('.page__about .page__content__text').children(), 100);
      });

  }

  render() {
    return (
      <div className="page page__about">
        <div className="page__content page__about__content">
          <h1>about</h1>
          <hr />
          <div className="page__content__photo">
            <img src={'../images/profile-picture-square--dark.jpg'} />
          </div>
          <div className="page__content__text">
            <p>Hello, World</p>
          </div>
          <ul className="page__content__career">
            {
              cvList.map( (job) => {
                return (
                  <CVElement
                    startTime={job.startTime}
                    endTime={job.endTime}
                    description={job.description}
                    place={job.place}
                    link={job.link}
                  />
                )
              })
            }
          </ul>
        </div>
      </div>
    );
  }
}


export default About;

Я также пытался вызвать соответствующие функции, когдавход, который не работал

    <Route path="/en/about" component={About} onEnter={() => console.log('Entered About')}/>

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Хорошо, я это выяснил.Это на самом деле довольно просто.Как предложил @Alex Dovzhanyn, я избавился от jQuery, но затем использовал объекты стиля DOM.

componentDidMount() {

      const pageAboutChildren = document.querySelector('.page__about .page__content__text').childNodes;
      const pageAboutCareer = document.querySelector('.page__content__career').childNodes;

      indentation(pageAboutChildren, 100);
      indentation(pageAboutCareer, 85);
      changeColor();
  }

с отступом ():

const indentation = (element, indent) => {
  for(var i = 0; i < element.length; i++) {
    element[i].style.marginLeft =  indent * (i+1) + 'px';
  }

}

У меня были некоторые проблемы со ссылками, которые еще больше смутили меняэто не так сложно, в конце концов

0 голосов
/ 24 августа 2018

Зачем использовать JQuery для стиля? Зачем вообще использовать jQuery? Просто передайте свои стили соответствующему элементу, используя атрибут style={{}}, например:

<ul className="page__content__career" style={{ marginLeft: '100px' }}>
  ...
</ul>
...