开发者问题收集

在 React 中样式化时出现未定义的“宽度”错误

2021-03-23
1102

我正在做我的 react 项目来创建侧面导航栏。

所以我有这个按钮,点击该按钮侧面导航栏应该打开。

<button className="openbtn" onClick={(e) => openNav(e)}>&#9776; Open Sidebar</button>

这是我的 openNav 函数

  function openNav() {
    console.log("open nav")
    document.getElementsByClassName("sidenav").style.width = "250px";
    document.getElementsByClassName("test").style.marginLeft = "250px";
  }

当我这样做时,我收到此错误

Uncaught TypeError: Cannot set property 'width' of undefined

我的侧边栏样式看起来像

 .sidenav {
     margin-top: 50px;
    height:100%;
    width: 0px;
    position: fixed;
    z-index: 1;
    top: 0;
    left: 0;
    background-color: white;
    overflow-x: hidden;
    padding-top: 20px;
    font-size: 15px;
  }

在 css 文件中,sidenav 和 test 都具有 width 属性。

那么如何解决这个问题呢?

这在普通的 html/css/javascript 中有效,如何在 react 中做到这一点?

3个回答

document.getElementsByClassName("sidenav")HTMLCollection 。您需要迭代每个元素并为它们指定样式。

let sideNav = document.getElementsByClassName("sidenav")
for(let i = 0; i < sideNav.length; i++)
   sideNav[i].style.width = "250px"
acerjt
2021-03-23

document.getElementsByClassName 返回多个元素。因此,您不能只写 .style.width`。相反,您需要运行循环。

const navEl = document.getElementsByClassName("sidenav")
for (var i = 0; i < navEl.length; i++) {
    navEl[i].style.width= "250px";
}

或者您只对一个元素感兴趣,请使用

document.getElementsByClassName("sidenav")[0].style.width= "250px"

最后,您输入的问题是 getElementsByClassNamed("test") 。在 ClassName 后面有一个额外的 d

Viral Patel
2021-03-23

使用 getElementsByClassName() ,您指的是集合。将数组中的第一个数字指定为 [0] 。尝试此代码:

function openNav() {
    console.log("open nav")
    document.getElementsByClassName("sidenav")[0].style.width = "250px";
    document.getElementsByClassName("test")[0].style.marginLeft = "250px";
}
s.kuznetsov
2021-03-23