2016-10-16 9 views
0

Не удалось обновить состояние из базы данных. console.log (db_name) возвращает данные. но не может получить доступ к нему на render/state/global.var. Как реагировать на доступ к локальным переменным, чтобы он мог использоваться в рендере jsx.React-native 0.35 setState issue

import React, { Component } from 'react'; 

import { AppRegistry, Text, View } from 'react-native'; 

import axios from 'axios'; 

class Easycall extends Component { 

constructor(props) { 

super(props); 

this.state = {name:"name",}; 

} 

gettt(){ 

    axios.get('http://192.168.43.236/dbzx.php') 

    .then(function (response) { 

    let db_name = response.data.name ; 

    this.setState({name:db_name}); 

}); 

} 


render() { 

    this.gettt(); 

    return (<Text>{this.state.name}</Text>); 

    } 


} 


AppRegistry.registerComponent('Easycall',() => Easycall); 

ответ

1

Попробуйте изменить:

gettt(){ 

    axios.get('http://192.168.43.236/dbzx.php') 

    .then(function (response) { 

    let db_name = response.data.name ; 

    this.setState = ({name:db_name}); 

}); 

} 

к:

gettt(){ 

    axios.get('http://192.168.43.236/dbzx.php') 

    .then((response) => { 

    let db_name = response.data.name ; 

    this.setState = ({name:db_name}); 

}); 

} 
+0

большое спасибо, что делает. – Isquare

+1

@fkilaiwi: Я отредактировал ваш ответ, используя некоторое количество догадок. Я предполагаю, что это то, что вы имели в виду. –

0
import React, { Component } from 'react'; 
import { AppRegistry, Text, View } from 'react-native'; 
import axios from 'axios'; 

class Easycall extends Component { 

    constructor(props) { 
     super(props); 
     this.state = {name:"name"}; 
    } 

    componentWillMount(){ 
     this.gett(); 
    } 

    gettt(){ 
     axios.get('http://192.168.43.236/dbzx.php') 
     .then(function (response) { 
      let db_name = response.data.name ; 
      this.setState({name:db_name}); 
     }); 
    } 

    render() { 
     return (<Text>{this.state.name}</Text>); 
    } 

} 

AppRegistry.registerComponent('Easycall',() => Easycall); 
+0

это была ошибка. починил это. но он говорит, что undefined не является функцией. оценивая setState. но я могу console.log данные. Есть данные – Isquare

+0

@MuneerPP: Я отредактировал ваш ответ и взял на себя смелость удалить много лишних пробелов. Дополнительные пустые строки в коде обычно являются результатом неправильного форматирования. Если мое изменение было неверным, пожалуйста, используйте ссылку [edit] под своим сообщением, чтобы внести улучшения, или посетите [историю изменений] (https://stackoverflow.com/posts/40072649/revisions), чтобы отбросить сообщение в другую версию , –

0

Вы должны связать свои методы, в которых вам необходимо получить доступ к this.

Избегайте вызова функции setState() в вашей функции рендеринга. Вместо того, чтобы добавить ниже методов жизненного цикла в класс выше:

componentWillMount { 
    this.gettt = this.gettt.bind(this); 
} 

componentDidMount { 
    this.gettt() 
} 

Теперь вы можете сделать это .setState() в gettt().

+0

где я должен поставить компонентWillMount в приведенном выше коде его синтаксис es6. поддерживает ли он это. – Isquare