Soy nuevo en React y estoy tratando de escribir una aplicación que funcione con una API. Sigo recibiendo este error:
TypeError: this.setState no es una función
cuando trato de manejar la respuesta API. Sospecho que hay algún problema con este enlace, pero no puedo encontrar la manera de solucionarlo. Aquí está el código de mi componente:
var AppMain = React.createClass({
getInitialState: function() {
return{
FirstName: " "
};
},
componentDidMount:function(){
VK.init(function(){
console.info("API initialisation successful");
VK.api('users.get',{fields: 'photo_50'},function(data){
if(data.response){
this.setState({ //the error happens here
FirstName: data.response[0].first_name
});
console.info(this.state.FirstName);
}
});
}, function(){
console.info("API initialisation failed");
}, '5.34');
},
render:function(){
return (
<div className="appMain">
<Header />
</div>
);
}
});
javascript
reactjs
Ivan
fuente
fuente
Puede evitar la necesidad de .bind (esto) con una función de flecha ES6.
fuente
onChange={(checked) => this.toggleCheckbox()}
, 2)onChange={this.toggleCheckbox.bind(this)}
..bind(this)
, establece el valor delthis
contexto primario desde dondethis.toggleCheckbox()
se llama, de lo contrariothis
se referiría a dónde se ejecutó realmente. b) La solución de flecha gorda funciona porque retiene el valor dethis
, por lo que te ayuda al no cambiar violentamente el valor dethis
. En JavaScript,this
simplemente se refiere al alcance actual, por lo que si escribe una función,this
es esa función. Si coloca una función dentro de ella,this
está dentro de esa función secundaria. Las flechasTambién puede guardar una referencia
this
antes de invocar elapi
método:fuente
React recomienda vincular esto en todos los métodos que necesitan usar esto en
class
lugar de esto de sí mismofunction
.O puede usar
arrow function
en su lugar.fuente
Solo necesitas vincular tu evento
por ex
fuente
Ahora ES6 tiene la función de flecha, es realmente útil si realmente confundes con la expresión bind (this) puedes probar la función de flecha
Así es como lo hago.
fuente
No es necesario asignar esto a una variable local si utiliza la función de flecha. Las funciones de flecha se vinculan automáticamente y puede mantenerse alejado de los problemas relacionados con el alcance.
El siguiente código explica cómo usar la función de flecha en diferentes escenarios
fuente
Ahora, en reaccionar con es6 / 7, puede vincular la función al contexto actual con la función de flecha como esta, hacer una solicitud y resolver promesas como esta:
Con este método, puede llamar fácilmente a esta función en el componenteDidMount y esperar los datos antes de representar su html en su función de representación.
No sé el tamaño de su proyecto, pero personalmente aconsejo no usar el estado actual del componente para manipular datos. Debe usar un estado externo como Redux o Flux o algo más para eso.
fuente
use las funciones de flecha, ya que las funciones de flecha apuntan al alcance primario y esto estará disponible. (sustituto de la técnica de enlace)
fuente
Aquí ESTE contexto está cambiando. Use la función de flecha para mantener el contexto de la clase React.
fuente
Si está haciendo esto y todavía tiene un problema, mi problema es que estaba llamando a dos variables con el mismo nombre.
Tenía
companies
un objeto traído de Firebase, y luego estaba tratando de llamarthis.setState({companies: companies})
, no estaba funcionando por razones obvias.fuente