Je suis nouveau sur React, j'ai du mal à rendre mon application à cause de cette erreur. Il semble que les données que j'essaye de restituer en tant qu'éléments ne seront pas rendues, car j'aurais tenté de définir l'état à l'état non monté.
Je ne suis pas sûr de savoir comment obtenir cette erreur, car je mets l'état de Data
dans componentDidMount
.
Comment puis-je résoudre ce problème?
error: attempted to update component that has already been unmounted (or failed to mount)
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;
Dans votre fonction de rendu, vous appelez this.setState({mounted:true})
. De la documentation des composants de React:
La fonction render () doit être pure, ce qui signifie qu'elle ne modifie pas l'état du composant, elle renvoie le même résultat à chaque appel, et n'interagit pas directement avec le navigateur.
Voici le link à la documentation React sur la fonction de rendu.
Mon problème c'est que j'oublie
import React from 'react'
dans mon fichier .jsx
, puisque je pensais que l’importation de React n’était pas nécessaire dans le composant fonctionnel.
Cette erreur peut se produire d'une autre manière ... en pensant que les accessoires sont des arguments individuels (les accessoires sont en fait un seul argument)
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>;
};
Mon problème était dans Sider, puis à l'intérieur de la balise Link, j'ai mal orthographié au lieu de/location que j'ai écrit/locaion.
<Menu.Item key="2">
<Icon type="settings" />
<span><Link style={styles.linkStyle} to="/locations">Locations</Link></span>
</Menu.Item>