1

我有 4 个带有列表的选项卡,以便为它们提供标题。我想访问每个选项卡的标题,但我只能访问整个 HTMLcollection。使用反应。

import React from 'react';
import {Component} from 'react';

class tabs extends Component {

    render() {
        return (
            <div className={"tabs"}>
                <ul>
                    <li><a>Class 1</a></li>
                    <li><a>Class 2</a></li>
                    <li><a>Class 3</a></li>
                    <li><a>Class 4</a></li>
                </ul>

                {console.log(document.getElementsByTagName("li"))};
                //full collection with length of 4

                 {console.log(document.getElementsByTagName("li").length)};
                 //0


       {console.log(document.getElementsByTagName("li").item(0).innerHTML)};
                  //"Cannot read property 'innerHTML' of null"

            </div>
        )
    }
}

export default tabs;
4

2 回答 2

1

那是因为当你声明 JSX 时,它不会立即打印到 DOM 中。首先,它会被 Babel 转译,在render钩子之后 React 会更新 DOM。但是,嘿,在这中间你试图访问这些 DOM 元素......

于 2018-03-19T17:17:49.133 回答
1

你到底想做什么?如果您只想li在某个时候获得 s 的数量,请使用ref

class Component extends React.Component {
  componentDidMount() {
    console.log(this.el.children.length) // 4
  }

  render() {
    return (
      <ul ref={ el => this.el = el }>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
      </ul>
    )
  }
}
于 2018-03-19T17:19:59.107 回答