Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript react.js this2.setState不是一个函数_Javascript_Reactjs_Firebase - Fatal编程技术网

Javascript react.js this2.setState不是一个函数

Javascript react.js this2.setState不是一个函数,javascript,reactjs,firebase,Javascript,Reactjs,Firebase,大家好,当用户注销时,我试图将用户\重定向到主页,但是我遇到了一些问题。我在react router中使用重定向,我应该被重定向到主页,因为重定向是真的,但是我得到一个wierd错误,说this2.setState不是一个函数 有人知道这是什么意思吗?谢谢你的帮助 import React from "react"; import { Collapse, Navbar, NavbarToggler, NavbarBrand, Nav, Button, NavItem,

大家好,当用户注销时,我试图将用户\重定向到主页,但是我遇到了一些问题。我在react router中使用重定向,我应该被重定向到主页,因为重定向是真的,但是我得到一个wierd错误,说this2.setState不是一个函数

有人知道这是什么意思吗?谢谢你的帮助

import React from "react";
import {
  Collapse,
  Navbar,
  NavbarToggler,
  NavbarBrand,
  Nav,
  Button,
  NavItem,
  NavLink,
  UncontrolledDropdown,
  DropdownToggle,
  DropdownMenu,
  DropdownItem
} from "reactstrap";
import { withRouter } from "react-router";
import Icon from "react-icons-kit";
import { car } from "react-icons-kit/fa/car";
import { Redirect, Link } from "react-router-dom";
import app from "../config/dev";
export default class NavigatioBar extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      authenticated: false,
      currentUser: null,
      redirect: false,
      isOpen: false
    };
    this.toggle = this.toggle.bind(this);
  }
  toggle() {
    this.setState({
      isOpen: !this.state.isOpen
    });
  }

  signout() {
    app
      .auth()
      .signOut()
      .then(user => {
        this.setState({ redirect: true });
      });
  }

  componentWillMount() {
    app.auth().onAuthStateChanged(user => {
      if (user) {
        this.setState({
          currentUser: user,
          authenticated: true
        });
      } else {
        this.setState({
          currentUser: null,
          authenticated: false
        });
      }
    });
  }
  render() {
    const { redirect } = this.state;

    if (redirect) {
      return <Redirect to="/" />;
    }
    alert(this.state.authenticated);
    const authenticated = this.state.authenticated;
    return (
      <div>
        <Navbar color="primary" dark expand="md">
          <div className="container">
            <NavbarBrand href="/">
              <Icon className="car-icon" icon={car} />
              G66 CARS
            </NavbarBrand>
            <NavbarToggler onClick={this.toggle} />
            <Collapse isOpen={this.state.isOpen} navbar>
              <Nav className="ml-auto" navbar>
                <NavItem>
                  <NavLink href="/cars">CARS</NavLink>
                </NavItem>
                <NavItem>
                  <NavLink href="/">FINANCE</NavLink>
                </NavItem>
                <NavItem>
                  <NavLink href="/">SERVICE</NavLink>
                </NavItem>
                <NavItem>
                  <NavLink href="/">PARTS</NavLink>
                </NavItem>
                <UncontrolledDropdown nav>
                  <DropdownToggle nav caret>
                    ABOUT
                  </DropdownToggle>

                  <DropdownMenu>
                    {authenticated ? (
                      <DropdownItem onClick={this.signout}>
                        <Button classname="btn-btn-primary">SignOut </Button>
                      </DropdownItem>
                    ) : (
                      <DropdownItem>
                        <Link to="/login"> Login </Link>
                      </DropdownItem>
                    )}

                    <DropdownItem>ABOUT US</DropdownItem>
                    <DropdownItem>STAFF</DropdownItem>
                    <DropdownItem>CONTACT US</DropdownItem>
                  </DropdownMenu>
                </UncontrolledDropdown>
              </Nav>
            </Collapse>
          </div>
        </Navbar>
      </div>
    );
  }
}
从“React”导入React;
进口{
崩溃
导航栏,
纳瓦巴托格勒,
纳瓦巴兰,
导航,
按钮
纳维坦,
导航链接,
不受控制的下降,
下拉开关,
下拉菜单,
下拉项
}从“反应带”;
从“react router”导入{withRouter};
从“反应图标工具包”导入图标;
从“套件/fa/car”导入{car};
从“react router dom”导入{Redirect,Link};
从“./config/dev”导入应用程序;
导出默认类NavigationBar扩展React.Component{
建造师(道具){
超级(道具);
此.state={
认证:假,
当前用户:null,
重定向:false,
伊索彭:错
};
this.toggle=this.toggle.bind(this);
}
切换(){
这是我的国家({
isOpen:!this.state.isOpen
});
}
签出(){
应用程序
.auth()
.signOut()
。然后(用户=>{
this.setState({redirect:true});
});
}
组件willmount(){
app.auth().onAuthStateChanged(用户=>{
如果(用户){
这是我的国家({
当前用户:用户,
真的吗
});
}否则{
这是我的国家({
当前用户:null,
认证:假
});
}
});
}
render(){
const{redirect}=this.state;
如果(重定向){
返回;
}
警报(this.state.authenticated);
const authenticated=this.state.authenticated;
返回(
G66汽车
汽车
财务
服务
部分
关于
{认证(
签到
) : (
登录
)}
关于我们
工作人员
联系我们
);
}
}

尝试绑定构造函数中的
signout()
函数以获取
上下文:

this.signout = this.signout.bind(this);
在arrow开始工作之前,每个新函数都定义了自己的
值。正如Anshul所写,箭头函数没有自己的
上下文。因此,您可以在
NavigationBar
组件中使用
signout=()=>{}
,它将自动访问其
上下文

signout = () => {
   app.auth().signOut().then((user) => {
    this.setState ({ redirect: true })
    })
}

注销没有此上下文。

可能意味着您正在实例上下文之外运行它;如果你搜索React组件方法绑定,你会发现到处都是。哪一行给出了错误?知道为什么我注销时navbar会消失吗?