【问题标题】:ReactJs setState undefined when using react-autoBind使用 react-autoBind 时 ReactJs setState 未定义
【发布时间】:2019-06-13 19:23:46
【问题描述】:

获取此未捕获的类型错误:尝试在函数中设置状态时无法读取未定义的属性“setState”。我知道已经发布了其他类似的问题,但没有一个使用 react-autobind

当我在构造函数中绑定函数时这有效:

this.toggleNav = this.toggleNav.bind(this)

但是我想用 react-autobind 来完成这个

import React from "react";
import ReactDOM from "react-dom";
import ScrollspyNav from "react-scrollspy-nav";
import autoBind from 'react-autobind';

export default class Navigation extends React.Component {
constructor(props) {
  super(props);
  autoBind(this);

  this.state = {
    toggleMobileNav: false
  };

}

    toggleNav() {
      this.setState((prev, props) => {
        return {
            toggleMobileNav: !prev.toggleMobileNav
        }
      });
    }


render() {
    return(

        <ScrollspyNav
            scrollTargetIds={["page-top", "about", "projects", "signup"]}
            activeNavClass="is-active"
            scrollDuration="1000"
            headerBackground="false"
            activeNavClass="active-nav"
        >

            <nav className="navbar navbar-expand-lg navbar-light fixed-top" id="mainNav">
              <div className="container">
                <a id="page-top" className="navbar-brand js-scroll-trigger" href="#page-top">Start Bootstrap</a>
                <button className="navbar-toggler navbar-toggler-right" onClick={this.toggleNav} type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
                  Menu &nbsp;&nbsp;
                  <i className="fas fa-bars"></i>
                </button>
                <div className= {this.state.toggleMobileNav ? "show collapse navbar-collapse" : " " + 'collapse navbar-collapse'} id="navbarResponsive">
                  <ul className="navbar-nav ml-auto">
                    <li className="nav-item">
                      <a className="nav-link" href="#about">About</a>
                    </li>
                    <li className="nav-item">
                      <a className="nav-link" href="#projects">Projects</a>
                    </li>
                    <li className="nav-item">
                      <a className="nav-link" href="#signup">Contact</a>
                    </li>
                  </ul>
                </div>
              </div>
            </nav>
        </ScrollspyNav>
)

} }

【问题讨论】:

    标签: javascript reactjs jsx


    【解决方案1】:

    如果你使用箭头函数语法来声明你的方法,你将不需要调用this.toggleNav = this.toggleNav.bind(this)或者使用react-autobind

    toggleNav = () => {
      this.setState((prev, props) => {
        return {
          toggleMobileNav: !prev.toggleMobileNav
        }
      });
    }
    

    这是一篇涵盖所有选项的 Medium 帖子:https://medium.com/komenco/react-autobinding-2261a1092849

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 2018-01-26
      • 2018-12-16
      • 1970-01-01
      • 2017-04-23
      • 2019-05-22
      • 2020-07-07
      • 2018-09-11
      相关资源
      最近更新 更多