Javascript React-setState(…)只能更新
我有一个问题,关于setState函数,这就是问题所在: 警告:设置状态(…):只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了setState()。这是禁止操作。请检查登录组件的代码 我不知道为什么会发生这是代码: LogIn.js(初始页面)Javascript React-setState(…)只能更新,javascript,reactjs,Javascript,Reactjs,我有一个问题,关于setState函数,这就是问题所在: 警告:设置状态(…):只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了setState()。这是禁止操作。请检查登录组件的代码 我不知道为什么会发生这是代码: LogIn.js(初始页面) import React,{Component}来自'React'; 从“firebase”导入firebase; 从'react router dom'导入{Redirect}; 导出默认类登录扩展组件{ 建造师(道具){ 超级(
import React,{Component}来自'React';
从“firebase”导入firebase;
从'react router dom'导入{Redirect};
导出默认类登录扩展组件{
建造师(道具){
超级(道具);
此.state={
洛格丁:错
};
}
handleAuth(){
让email=document.getElementById('email').value;
让password=document.getElementById('password')。值;
设auth=firebase.auth();
让promise=auth.signInWithEmailAndPassword(电子邮件,密码);
承诺。然后(结果=>{
console.log(result.email);
});
promise.catch(错误=>{
var errorCode=error.code;
var errorMessage=error.message;
控制台日志(错误代码);
警报(错误消息);
});
}
componentDidMount(){
firebase.auth().onAuthStateChanged(firebaseUser=>{
console.log(firebaseUser.email);
if(firebaseUser.email){
这是我的国家({
洛格丁:是的
});
}
否则{
警报(“无日志”);
}
});
}
render(){
if(this.state.loggedIn){
返回();
}
返回(
伊尼西亚·塞西翁
);
}
}
Dashboard.js(当loggedIn为true时重定向此页面)
import React,{Component}来自'React';
从“../../components/Template/Header/Header.js”导入标题;
从“../../components/Template/Users/PanelUsers.js”导入PanelUsers;
从“../../components/Dashboard/Cards/CardGroup.js”导入CardGroup;
从“../../components/Dashboard/DetailCard/CardDecks.js”导入卡片组;
从“../../store”导入存储;
从“../../db”导入{Dashboard};
导出默认类登录扩展组件{
构造函数(){
仪表板();
超级();
此.state={
数据状态:[]
};
}
componentDidMount(){
store.subscribe(()=>{
这是我的国家({
dataState:store.getState().dataDashboardReducer.data
});
});
}
组件将卸载(){
console.log(“componente desmontado仪表板”);
}
render(){
返回(
);
}
}
当我转到另一个页面并返回登录时,会发生这种情况,因为您试图在componentWillMount()中设置状态,而组件尚未装入。将其更改为componentDidMount(),应该可以正常工作。发生这种情况是因为您试图在componentWillMount()中设置状态,而组件尚未装入。将其更改为componentDidMount(),它应该可以正常工作。我将设置状态放在componentDidMount()中,但我有相同的设置error@Lias因为当组件卸载时,您试图
setState
。我修复了它,我放置了componentWillUnmount(),因为我尝试了所有react.component函数,但是我仍然犯了同样的错误,我把setStates放在componentDidMount()中,但是我有同样的错误error@Lias因为当组件卸载时,您试图setState
。我修复了它,因为我尝试了所有react.component函数,所以我放置了componentWillUnmount(),但仍然出现了相同的错误
import React, { Component } from 'react';
import firebase from 'firebase';
import { Redirect } from 'react-router-dom';
export default class LogIn extends Component {
constructor(props) {
super(props);
this.state = {
loggedIn : false
};
}
handleAuth(){
let email = document.getElementById('email').value;
let password = document.getElementById('password').value;
let auth = firebase.auth();
let promise = auth.signInWithEmailAndPassword(email, password);
promise.then(result=>{
console.log(result.email);
});
promise.catch(error=> {
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorCode);
alert(errorMessage);
});
}
componentDidMount(){
firebase.auth().onAuthStateChanged(firebaseUser =>{
console.log(firebaseUser.email);
if (firebaseUser.email) {
this.setState({
loggedIn: true
});
}
else{
alert("No logeado");
}
});
}
render(){
if (this.state.loggedIn) {
return ( <Redirect to="/Dashboard"/> );
}
return(
<div className="container comunidadLogIn">
<div className="row" >
<div className="col-sm-2 push-5 align-self-center" >
<input type="text" name="email" id="email" placeholder="Email"/>
</div>
</div>
<div className="row" >
<div className="col-sm-2 push-5 align-self-center" >
<input type="password" name="password" id="password" placeholder="Password"/>
</div>
</div>
<div className="row" >
<div className="col-sm-2 push-5 align-self-center" >
<button className="btn btn-secondary" onClick={this.handleAuth} id="btnLogin">Iniciar sesión</button>
</div>
</div>
</div>
);
}
}
import React, { Component } from 'react';
import Header from '../../components/Template/Header/Header.js';
import PanelUsers from '../../components/Template/Users/PanelUsers.js';
import CardGroup from '../../components/Dashboard/Cards/CardGroup.js';
import CardDecks from '../../components/Dashboard/DetailCard/CardDecks.js';
import store from '../../store';
import { Dashboard } from '../../db';
export default class LogIn extends Component {
constructor() {
Dashboard();
super();
this.state = {
dataState: []
};
}
componentDidMount(){
store.subscribe(()=>{
this.setState({
dataState: store.getState().dataDashboardReducer.data
});
});
}
componentWillUnmount(){
console.log("componente desmontado Dashboard");
}
render(){
return(
<div>
<Header />
<div className="row">
<div className="col-sm-2">
<PanelUsers/>
</div>
<div className="col-sm-6" >
<CardGroup datos= { this.state.dataState }/>
</div>
<div className="col-sm-4">
<CardDecks/>
</div>
</div>
</div>
);
}
}