1. 程式人生 > >react使用原生js獲取點選的ul下的第幾個li 並設定className為active

react使用原生js獲取點選的ul下的第幾個li 並設定className為active

import React from 'react'
import './index.less';
import { Link } from "react-router-dom";

class Index extends React.Component {
    state = {
        current: 1,
      }
    render () {
        return (
            <div id="menu">
                <ul id="menu-list" onClick={this.getHoverIndex}>
                    <li className="active"><Link to="/">首頁</Link></li>
                    <li><Link to="/shop">商品</Link></li>
                    <li><Link to="/set">設定</Link></li>
                    <li><Link to="/salePhone">出貨詳情</Link></li>
                </ul>
            </div>
        );
    }
    getHoverIndex = (e) => {
        var _this = this;
        var oList = document.getElementById("menu-list");
        var li_list = oList.getElementsByTagName("li");
        for( var i = 0, len = li_list.length; i < len; i ++ ){
            li_list[i].className = '';
            li_list[i].index = i;
            li_list[i].onclick = function() {
                _this.setState({
                    current: this.index,
                });
            }
            li_list[this.state.current].className = 'active';
        }
    }
}
export default Index

話不多說,直接上程式碼吧。

其中必須定義var _this=this,直接使用this的話指向的是函式本身(無法使用setState),而非父層。