【问题标题】:React app. Can't call setState on a component that is not yet mounted反应应用。无法在尚未安装的组件上调用 setState
【发布时间】:2018-08-30 08:37:25
【问题描述】:

当我尝试更改输入字段的值时,我收到以下警告。

无法在尚未安装的组件上调用 setState。这是一个无操作,但它可能表明您的应用程序中存在错误。而是直接分配给this.state 或在登录组件中定义具有所需状态的state = {}; 类属性。

我不明白为什么会发生这种情况,我的任何其他反应页面都没有发生这种情况。

唯一的区别是这是登录页面,所以它有自己的页面路由。

有人可以帮忙吗?我已经将我的组件剥离到最简单的部分,看看是否有人能发现我做错了什么。

import React, { Component } from 'react';

class Login extends Component {
    constructor(props) {
        super(props);
        this.state = {
            username: ''
        };

        this.onChange = this.onChange.bind(this);
    }

    onChange(e) {
        this.setState({ [e.target.name]: e.target.value });
    }

    render() {
        const { username } = this.state;

        return (
            <input type="text" placeholder="Email" className="form-control" name="username" autoComplete="email" value={username} onChange={this.onChange} />
        );
    }
}

export default Login;

【问题讨论】:

  • 看起来您发布的代码不会导致问题,当我按原样安装此组件时,我没有收到任何警告。您能否发布导致警告的整个组件?
  • 我在我的应用程序中只使用了上面的确切代码,但它仍然抛出错误。这就是为什么我很困惑,因为我有很多像这样的其他组件都可以正常工作。唯一的区别是我将它直接加载到视图中,而不是将它放在另一个组件中。
  • 你能发布你收到的警告吗?
  • 我得到的警告只是上面黄色框中的警告
  • 如果这是您正在使用的确切组件,那么问题不在此组件中。

标签: javascript reactjs


【解决方案1】:

问题不是因为我的组件,而是因为我更改了 webpack 配置以支持 async await es7 功能。到以下...

“预设”:[“es2017”、“stage-0”、“react”]

相反,我实际上需要执行下一个答案并安装

npm install --save-dev regenerator-runtime

https://stackoverflow.com/a/51650116/3284707

从上面的链接中回答解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多