Estou usando o Axios (https://github.com/axios/axios) para fazer a requisição HTTP e o MyJSON para guardar/enviar meus dados (http://myjson.com/).
Tudo deu certo, mas quando cheguei na parte de inserir os dados na tabela ao clicar no botão, ele apresenta o seguinte erro:
TypeError: {(intermediate value)}.bind is not a function
at App.js:35
Segue meu código
constructor(){
super();
this.state = {
lista: [],
name: '',
email: '',
password: ''
}
this.enviaForm = this.enviaForm.bind(this);
}
componentDidMount(){
Axios.get('https://api.myjson.com/bins/13b4g2')
.then((response) => {
this.setState({
lista: response.data
})
})
}
enviaForm(evento){
evento.preventDefault();
Axios.post('https://api.myjson.com/bins', {
'name': this.state.name,
'email': this.state.email,
'password': this.state.password
}).then((response) => {
this.setState({
lista: response.config.data
}.bind(this))
}).catch((response)=> {
console.log(response)
})
}
setName = (evento) => {
this.setState({name: evento.target.value});
}
setEmail = (evento) => {
this.setState({email: evento.target.value});
}
setPassword = (evento) => {
this.setState({password: evento.target.value});
}
render() {
return (
// Omitido
<div className="content" id="content">
<div className="pure-form pure-form-aligned">
<form className="pure-form pure-form-aligned" onSubmit={this.enviaForm.bind()}>
<div className="pure-control-group">
<label htmlFor="nome">Nome</label>
<input id="nome" type="text" name="nome" value={this.state.name} onChange={this.setName}/>
</div>
<div className="pure-control-group">
<label htmlFor="email">Email</label>
<input id="email" type="email" name="email" value={this.state.email} onChange={this.setEmail}/>
</div>
<div className="pure-control-group">
<label htmlFor="senha">Senha</label>
<input id="senha" type="password" name="senha" value={this.state.password} onChange={this.setPassword}/>
</div>
<div className="pure-control-group">
<label></label>
<button type="submit" className="pure-button pure-button-primary">Gravar</button>
</div>
</form>
</div>
<div>
<table className="pure-table">
<thead>
<tr>
<th>Nome</th>
<th>email</th>
</tr>
</thead>
<tbody>
{this.state.lista.map((autor, index) =>
<tr key={index}>
<td>{autor.name}</td>
<td>{autor.email}</td>
</tr>
)}
</tbody>
</table>
</div>
</div>
)}
Se eu retiro o bind do setState no Post, ele dá esse erro:
Uncaught TypeError: this.state.lista.map is not a function