Ошибка: попытка обновления компонента, который уже был удален (или не смонтирован)

Я новичок в React, у меня проблемы с рендерингом моего приложения из-за этой ошибки. Кажется, данные, которые я пытаюсь отобразить как элементы, не будут отображаться из-за попытки установить состояние при размонтировании?

Я не уверен, как я получаю эту ошибку, так как я устанавливаю состояние Data в componentDidMount.

Как я могу исправить эту проблему?

ошибка: попытка обновить компонент, который уже был размонтирован (или не смонтирован)

class Profile extends React.PureComponent {
  static propTypes = {
    navigation: PropTypes.object,
    handleLogout: PropTypes.func,
    user: PropTypes.object,
  };

  static navigationOptions = {
    headerVisible: true,
    title: 'Profile',
  };

constructor(props) {
    super(props);

    this.state = {
    data: [],
    loading: true

    };
  }

componentDidMount() {

  fetch("http://10.0.2.2:8080/combined", { method: 'get' })
    .then(response => response.json())
    .then(data => {
      this.setState({data: data,});

    })
   .catch(function(err) {
     // 
   })
}

 render() {

    const { user } = this.props;
    let email;

    if (user) {
      email = user.rows[0].ACCTNO;
    }
    return (
      <ContentWrapper>
        <View style={styles.container}>
          <Image style={styles.header} source={images.profileHeader} />
          <View style={styles.body}>
            <Avatar email={email} style={styles.avatar} />
             {
   this.state.data.map(function(rows, i){
         this.setState({mounted:  true});

    return(
      <View key={i}>
        <Text>{rows.FIRSTNAME}</Text>
      </View>
    );
  })
}            <Text style={styles.email}>{_.capitalize(email)}</Text>

            <Button
              title="Log out"
              icon={{ name: 'logout-variant', type: 'material-community' }}
              onPress={this.logout}
              style={styles.logoutButton}
            />
          </View>
        </View>
      </ContentWrapper>
    );
  }
}

export default Profile;

Ответы

Ответ 1

В вашей функции рендеринга вы вызываете this.setState({mounted:true}). Из документации по компонентам React:

Функция render() должна быть чистой, что означает, что она не изменяет состояние компонента, она возвращает тот же результат при каждом вызове и не взаимодействует напрямую с браузером.

Здесь ссылка на документацию React на функцию рендеринга.

Ответ 2

Моя проблема в том, что я забываю

import React from 'react'

в моем .jsx файле, так как я думал, что импортный React не нужен в функциональном компоненте.

Ответ 3

Есть и другая ошибка, которая может возникнуть... думая, что реквизиты являются отдельными аргументами (реквизит на самом деле является единственным аргументом)

import React from 'react';

const Posts = posts => {       // WRONG

const Posts = ({posts}) => {   // RIGHT
  const renderPosts = () => {
    return posts.map(post => <div>{post.title}</div>);
  };

  return <div>{renderPosts()}</div>;
};

Ответ 4

Моя проблема была в Sider, затем внутри тега Link я сделал misspell вместо /location, которое я написал /locaion.

 <Menu.Item key="2">
      <Icon type="settings" />
      <span><Link style={styles.linkStyle} to="/locations">Locations</Link></span>
    </Menu.Item>