J'apprends réagir et j'essaie de faire un petit projet. Ce projet montre une liste des utilisateurs d'un J'ai une DIV qui charge la liste, une autre div cachée avec des champs modifiables et un bouton qui Lorsque vous avez cliqué sur la liste, div est masqué et que l'autre apparaît. p> Lorsque je clique sur le bouton, il donne l'erreur suivante: P> "TypeError: ne peut pas lire la propriété" Handleclick "de non défini" p>
blockQuote> Quelqu'un peut-il aider? p> jsonlaceholder code> et voulait le faire pour éditer les champs.
import React from 'react';
import './App.css';
class User extends React.Component {
constructor(){
super();
this.state = {
users: [],
displayList: 'block',
displayForm: 'none'
}
this.handleClick = this.handleClick.bind(this);
}
componentDidMount(){
this.getUsers();
}
getUsers(){
fetch('https://jsonplaceholder.typicode.com/users')
.then(response => response.json())
.then(json => this.setState({users: json}));
}
handleClick(){
this.setState({displayList: 'none', displayForm: 'block'})
}
render(){
const list = this.state.displayList;
const form = this.state.displayForm;
return (
<ul>
{this.state.users.map(function(item){
return (
<div key={item.id}>
<br></br>
<div style={{display: list}}>
<h2>{item.name} </h2>
<p>Email: {item.email} </p>
<p>Address: </p>
<ul>
<li>Street: {item.address.street} </li>
<li>Suite: {item.address.suite} </li>
<li>City: {item.address.city} </li>
<li>ZipCode: {item.address.zipcode} </li>
</ul>
<p>Phone: {item.phone} </ p>
              </div>
<div style={{display: form}} >
                <div>
                  <h2>{item.name} </h2>
<p>Email: <input value = {item.email} className="form-control" onChange=""/> </p>
<p>Address: </p>
<ul>
<li>Street: <input value = {item.address.street} className="form-control" /> </li>
<li>Suite: <input value = {item.address.suite} className="form-control" /> </li>
<li>City: <input value = {item.address.city} className="form-control" /> </li>
<li>ZipCode: <input value = {item.address.zipcode} className="form-control" /> </li>
</ul>
<p>Phone: <input value = {item.phone} className="form-control" /> </p>
                </div>
              </div>
<button onClick={() => this.handleClick()}> Edit </button>
<hr></hr>
</div>
)
})}
</ul>
);
}
}
export default User;
3 Réponses :
C'est parce que le rappel de la méthode de la carte p> ceci.state.user.map code> n'est pas lié. Vous devez le transformer en une fonction de flèche. Comme ceci: import React from 'react';
import './App.css';
class User extends React.Component {
constructor(){
super();
this.state = {
users: [],
displayList: 'block',
displayForm: 'none'
}
this.handleClick = this.handleClick.bind(this);
}
componentDidMount(){
this.getUsers();
}
getUsers(id){
fetch('https://jsonplaceholder.typicode.com/users')
.then(response => response.json())
.then(json => this.setState({users: json}));
}
handleClick(){
this.setState({displayList: 'none', displayForm: 'block'})
}
render(){
const list = this.state.displayList;
const form = this.state.displayForm;
return (
<ul>
{this.state.users.map((item => {
return (
<div key={item.id}>
<br></br>
<div style={{display: list}}>
<h2>{item.name} </h2>
<p>Email: {item.email} </p>
<p>Address: </p>
<ul>
<li>Street: {item.address.street} </li>
<li>Suite: {item.address.suite} </li>
<li>City: {item.address.city} </li>
<li>ZipCode: {item.address.zipcode} </li>
</ul>
<p>Phone: {item.phone} </ p>
</div>
<div style={{display: form}} >
<div>
<h2>{item.name} </h2>
<p>Email: <input value = {item.email} className="form-control" onChange=""/> </p>
<p>Address: </p>
<ul>
<li>Street: <input value = {item.address.street} className="form-control" /> </li>
<li>Suite: <input value = {item.address.suite} className="form-control" /> </li>
<li>City: <input value = {item.address.city} className="form-control" /> </li>
<li>ZipCode: <input value = {item.address.zipcode} className="form-control" /> </li>
</ul>
<p>Phone: <input value = {item.phone} className="form-control" /> </p>
</div>
</div>
<button onClick={this.handleClick}> Edit </button>
<hr></hr>
</div>
)
}))}
</ul>
);
}
}
export default User;
Merci beaucoup!
Vous savez comment je peux le faire, mais juste sur l'utilisateur que je clique? Passer l'identifiant de l'utilisateur à la main de la main, par exemple
Oui, vous devez passer une fonction incidité, alors allez comme suit ce handleclick (utilisateur) code> mais ne s'exécute pas avant le clic
oui je l'ai fait aussi ahah je vais essayer de trouver le reste du code à l'intérieur de Hadleclick pour changer une seule
Le problème est que Pour conserve la valeur de cette que vous appelez transmettez le rappel sur la carte en tant que fonction de flèche: p> . peut explicitement passer this.handleclick code> est référencé à l'intérieur d'un rappel défini comme une fonction régulière code> qui est transmis à une carte code>. Fonction régulière ont Leurs valeurs de ceci code> qui n'est pas le composant. cette code> comme un second argument sur la carte code> p>
Vous devez lier la méthode à l'objet.
Soit: p> ou: p> Sinon, il perd le contexte. P> p>
Cela ne fonctionne pas pour et adjers une erreur supplémentaire: Rejet non géré (TypeError): impossible de lire la propriété 'Handleclick' de non définie