Closed krmslmz closed 5 years ago
Açıklamada componentWillUpdate ve ComponentDidUpdate methodları içerisinde setState methodu çağrılmasından kaynaklandığını söylüyor. Bu methodlar içinde bir şekilde setState çağrılıyorsa bu sonsuza kadar süreceği için bu hatayı alıyor olmalısınız.
methodları kullanmıyorum fonksiyonun render bölümünde direkt veya fonksiyon çalıştırdığımda içinde setstate varsa bu şekilde hata veriyor
render üzerinde çağırdığınız methodlar direkt olarak setState çağırıyorsa bu olay her türlü yaşanacaktır. Neden onu kullanmak istiyorsunuz? Kullanmadan bir şekilde yapılabilir. Asıl yapmak isteğiniz sistemi anlatırsanız yardımcı olabilirim
instagram ile ilgili bir eklenti uygulaması yapmaya çalışıyorum iki tür sorunum var birisinde home sayfam açıılınca birden çok render yapıyor bunun için state bağlayıp gelen sonuca göre sonuç varsa açıyorum ikinci sebebi de stateden verinin içine bakıyorum bazen token düşüyor token düştüğünde uygulama login sayfasına dönsün istiyorum gösterebilirim mail veya skypeden
import React , {Component}from 'react'; import * as firebase from 'firebase'; import { ImageBackground,StyleSheet, Text, View,Dimensions,TextInput,TouchableOpacity,FlatList,ScrollView,Image } from 'react-native'; import { NavigationActions } from 'react-navigation'; import FallingDrawer from 'react-native-falling-drawer'; const {width, height } = Dimensions.get('window');
export default class Home extends React.Component {
state={ sayac:0, baskan:JSON.stringify(null), ready2:JSON.stringify(false), ready:JSON.stringify(false), user:JSON.stringify(null), info:{}, instaInfo:JSON.stringify(null), tokennumarasi:'', bilgiler:JSON.stringify(null) }
selam() {
const {navigation} = this.props;
this.setState({tokennumarasi : navigation.getParam('tknkod','NO-ID')}) fetch('https://api.instagram.com/v1/users/self?access_token=' + this.state.tokennumarasi) .then(response => response.json()) .then(data =>{data.data; this.setState({instaInfo : data.data, bilgiler : data.data.counts, ready : JSON.stringify(true), sayac : 0 })}) .catch((error) => { this.state.sayac=2; });
}
goDetay(item)
{ this.props.navigation.navigate('Detay',{tknkod:item,islogin:this.state.tokennumarasi,uyeid:this.state.instaInfo.id});
} async cikisyapcnm(item) {
this.props.navigation.navigate('Login',{islogin2:'sak'});
} kodvar() {
this.setState({sayac:this.state.sayac++});
} render() { this.selam(); if(this.state.ready===JSON.stringify(false)){
if(this.state.sayac >= 2){
this.cikisyapcnm('s');
}
console.log('selam3'); return (<View style={{alignItems:'center',borderBottomColor:'green',backgroundColor:'#169E86',height:500,left:0,borderBottomWidth:1,borderBottomColor:'black'}}> <Text style={{color:'white',fontSize:20,marginTop:250,alignItems:'center',padding:15}}> Yükleniyor..
</View>)
this.componentDidMount();
} else { console.log('selam2'); return (
render methodu üzerinden kontrollerinizi yapabilirsiniz fakat state'i güncellememelisiniz (render çalıştığı anda çalışan methodlardan bahsediyorum, mesela selam). Sayfaları yönlendirecek yeri bir View üzerinden yapabilirsiniz. token kontorünü de render methodu üzerinden yapabilirsiniz ancak setState methodunu çalıştırdığınızda henüz this.state değişkeni değimemiş durumda oluyor. Bu yüzden setState methodunu çalıştırmadan statedeki değişkeni kendiniz de değiştirebilirsiniz. ör:
this.state.tokennumarasi = 'token-numarası';
this.setState({
tokennumarasi: this.state.tokennumarasi
})
React ile birkaç todo uygulamasına bakarak aslı sistemi çözebilirsiniz. Buradan da faydalanabilirsiniz: http://turkcekaynaklar.com/#react
Bu arada kodları paylaşmak istediğinizde markdown'un özelliklerini kullanabilirsiniz. ör. bir kod bloğunu yazmak için şu karakterler arasına yazabilirsiniz:
setstate yerine ne kullanabilirim
ya da nasıl bir kodlama yapsam önce bu jsonu parse eder düzgünce
sorunu çözdüm navigate den gelen parametre ilk sefer null geliyormuş if else ile onu kontrol ettirdim bütün bu saçma setstateler ortadan kalktı
react native ile uygulama geliştirme konusunda çabalıyorum lakin verdiği hatalar beni o duruma getiriyor ki pc yi yumruklayıp kırmamak için kendimi zor tutuyorum
HATA: invariant violation: Maximum update depth exceeded. This can happen when a component repeactedly calls setState inside componentWillUpdate or ComponentDidUpdate. React limits the number of nested updates to prevent infinite loops.