账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    antd 中 页面来回切换 ,setState报错
    49
    0

    报错信息是:
    Warning: Can only update a mounted or mounting component. This usually means you called setState, replaceState, or forceUpdate on an unmounted component. This is a no-op.

    步骤为:
    有两个页面,a和b,都是antd的table,在column中render了一个按钮

    <a key={'btn-delete'}  onClick={() => {
        this.setState({    
            b: Date.now()
        })
    }}>删除</a>

    如果现在用this.props.history.push('/b')跳转到b,然后再用this.props.history.push('/a')跳转到a,此时点击删除,就会报这个错,但是如果刷新页面,点击就不会报错

    求大神

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 惘叹之 普通会员 1楼

      在使用antd库时,有时候会出现页面来回切换时出现setState报错的情况。这可能是因为你在使用setState方法时传入的值不是预期的类型。以下是一些可能的原因和解决方法:

      1. 要确保传入的值是预期的类型。例如,如果你使用的是setState来改变对象的状态,那么你应该确保传入的值是该对象的一个属性或者属性的数组。

      例如,如果你有一个对象:

      javascript const myObject = { name: 'John', age: 30 };

      setState方法中,你应该这样传递值:

      javascript myObject.name = 'Jane'; myObject.age = 40;

      1. 如果你的setState方法返回一个对象,那么这个对象应该是一个包含你想要改变的属性的数组。如果你只是简单地传递了对象的某个属性,那么setState方法可能会报错。

      例如:

      javascript myObject.name = 'Jane';

      这会导致setState方法失败,因为myObject对象不是一个数组,而是对象本身。

      为了解决这个问题,你应该使用setState方法的Array.from()方法,将对象转换为数组。例如:

      javascript myObject = Array.from({length: 1}, (_, i) => ({name: 'John', age: i}));

      1. 如果你的setState方法在更新状态后立即返回,那么setState方法可能会报错,因为它认为没有更多的数据需要更新状态。

      例如:

      javascript myObject.name = 'Jane';

      这会导致setState方法失败,因为它认为没有更多的数据需要更新状态。

      为了解决这个问题,你应该在setState方法返回之前进行更新操作。

      例如:

      javascript myObject.name = 'Jane'; myObject.age = 40; myObject.updateName();

      希望这些信息能对你有所帮助。如果你仍然遇到问题,可以进一步提供更多详细信息,以便我们更好地帮助你解决问题。

    • 在使用antd库时,有时候会出现页面来回切换时出现setState报错的情况。这可能是因为你在使用setState方法时传入的值不是预期的类型。以下是一些可能的原因和解决方法:

      1. 要确保传入的值是预期的类型。例如,如果你使用的是setState来改变对象的状态,那么你应该确保传入的值是该对象的一个属性或者属性的数组。

      例如,如果你有一个对象:

      javascript const myObject = { name: 'John', age: 30 };

      setState方法中,你应该这样传递值:

      javascript myObject.name = 'Jane'; myObject.age = 40;

      1. 如果你的setState方法返回一个对象,那么这个对象应该是一个包含你想要改变的属性的数组。如果你只是简单地传递了对象的某个属性,那么setState方法可能会报错。

      例如:

      javascript myObject.name = 'Jane';

      这会导致setState方法失败,因为myObject对象不是一个数组,而是对象本身。

      为了解决这个问题,你应该使用setState方法的Array.from()方法,将对象转换为数组。例如:

      javascript myObject = Array.from({length: 1}, (_, i) => ({name: 'John', age: i}));

      1. 如果你的setState方法在更新状态后立即返回,那么setState方法可能会报错,因为它认为没有更多的数据需要更新状态。

      例如:

      javascript myObject.name = 'Jane';

      这会导致setState方法失败,因为它认为没有更多的数据需要更新状态。

      为了解决这个问题,你应该在setState方法返回之前进行更新操作。

      例如:

      javascript myObject.name = 'Jane'; myObject.age = 40; myObject.updateName();

      希望这些信息能对你有所帮助。如果你仍然遇到问题,可以进一步提供更多详细信息,以便我们更好地帮助你解决问题。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部