javascript - 如何在reactJs中检测包含特定类的子节点?

标签 javascript reactjs

我已经通过reactJS完成了渲染

渲染(){

    return (
      <div>
        <Router>
          <div className="wrapper2">
            <nav id="menu-principal" className="main menu-principal">
              <ul>
                <li><NavLink className="home-link" exact to="/">início</NavLink></li>
                <li><NavLink exact to="/nota_biografica">nota biográfica</NavLink></li>

              </ul>
            </nav>
            <div className="page-content">
              <Route exact path='/nota_biografica' render={() => <NotaBiografica />} />                  
              <Route exact path='/' render={() => <Home />} />
            </div>
          </div>
        </Router>
      </div>
    )
  }

当我单击包含“home-link”类的链接时,我想做一些操作。就像我在下面的示例中尝试执行的操作一样,但没有成功。我该如何解决?谢谢。

var el = document.querySelector(".menu-principal");
      el.onclick = (event) => {                 
        for(var i = 0; i < el.childNodes.length; i++) {
          if(el.childNodes[i].className === "home-link"){
            alert('true')
          }
        }
      }

最佳答案

因为您定位的元素是<NavLink>通常应该导航到另一个路由器页面的标签,我相信您附加的事件将不会运行。我建议您不要使用<NavLink>只需使用 this.props.history.push('/path/to/route')而是在onClick上处理程序(在导航到另一个路由地址之前需要运行的过程之后)。

下面的例子,请关注withRouter我改变<NavLink>跨越然后附加 onHomeCLick它的处理程序:

import React, {Component} from 'react';
import {withRouter, Route, BrowserRouter as Router} from "react-router-dom";
class YourComponent extends Component {

  onHomeCLick = () => {
    //DO something here prior to router navigation of ".home-link" element

    this.props.history.push( '/' );
  };

  render(){
    return (
      <div>
        <Router>
          <div className="wrapper2">
            <nav id="menu-principal" className="main menu-principal">
              <ul>
                <li><span className="home-link" onClick={this.onHomeCLick}>início</span></li>
                <li><NavLink exact to="/nota_biografica">nota biográfica</NavLink></li>

              </ul>
            </nav>
            <div className="page-content">
              <Route exact path='/nota_biografica' render={() => <NotaBiografica />} />
              <Route exact path='/' render={() => <Home />} />
            </div>
          </div>
        </Router>
      </div>
    )
  }

}

export default withRouter( YourComponent );

更新===========

如果你喜欢使用 <NavLink> ,还有一个技巧,唯一的解决办法就是“回调”方式。一旦您导航到路线,它就会触发(我仍然看不到是否有办法在导航之前做到这一点)。我们开始吧:

import React, {Component} from 'react';
import {Route, BrowserRouter as Router} from "react-router-dom";

class YourComponent extends Component {

  isActive= (match, location) => {
    if (match) {
      console.log('Hi i am active, do something here');
    }
    return match;
  };

  render(){
    return (
      <div>
        <Router>
          <div className="wrapper2">
            <nav id="menu-principal" className="main menu-principal">
              <ul>
                <li><NavLink className="home-link" activeClassName="active" isActive={this.isActive}>início</NavLink></li>
                <li><NavLink exact to="/nota_biografica">nota biográfica</NavLink></li>

              </ul>
            </nav>
            <div className="page-content">
              <Route exact path='/nota_biografica' render={() => <NotaBiografica />} />
              <Route exact path='/' render={() => <Home />} />
            </div>
          </div>
        </Router>
      </div>
    )
  }

}

export default YourComponent;

关于javascript - 如何在reactJs中检测包含特定类的子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54015586/

相关文章:

javascript - 我需要 react-redux 的数据库来存储用户吗?

javascript - 使用 fetch 返回的结果与使用 curl 或在浏览器中打开页面的结果不同

javascript - 在 SVG 中显示流运动的最佳方式?

javascript - 设置溢出-x :scroll and hide the horizontal scrollbar

javascript - 在 React 中使用三元 if else 和 Promise 是一个不好的方法吗

javascript - 如何在语义 ui 中循环 react ?

javascript - 继电器: fetch for recursive data returns null

javascript - 在 React 中为输入字段设置默认值?

javascript - 如何将 Angular 代码与 spring boot 集成?如何从 Controller 调用 Angular 特定页面?

javascript - 遍历 JSON 并将数组更改为字符串