J'essaie de créer un joli composant ApiWrapper pour remplir les données dans divers composants enfants. D'après tout ce que j'ai lu, cela devrait fonctionner: https://jsfiddle.net/vinniejames/m1mesp6z/1/
class ApiWrapper extends React.Component {
constructor(props) {
super(props);
this.state = {
response: {
"title": 'nothing fetched yet'
}
};
}
componentDidMount() {
this._makeApiCall(this.props.endpoint);
}
_makeApiCall(endpoint) {
fetch(endpoint).then(function(response) {
this.setState({
response: response
});
}.bind(this))
}
render() {
return <Child data = {
this.state.response
}
/>;
}
}
class Child extends React.Component {
constructor(props) {
super(props);
this.state = {
data: props.data
};
}
render() {
console.log(this.state.data, 'new data');
return ( < span > {
this.state.data.title
} < /span>);
};
}
var element = < ApiWrapper endpoint = "https://jsonplaceholder.typicode.com/posts/1" / > ;
ReactDOM.render(
element,
document.getElementById('container')
);
Mais pour une raison quelconque, il semble que le composant enfant ne se met pas à jour lorsque l'état parent change.
Est-ce que j'ai râté quelque chose?
nextProp
ne déclenchera pas un nouveau rendu sanscomponentWillReceiveProps(nextProps)
?static getDerivedStateFromProps(nextProps, prevState)
reactjs.org/docs/…Il y a certaines choses que vous devez changer.
Lorsque
fetch
vous obtenez la réponse, ce n'est pas un json. Je cherchais comment puis-je obtenir ce json et j'ai découvert ce lien .De l'autre côté, vous devez penser que la
constructor
fonction n'est appelée qu'une seule fois.Vous devez donc changer la façon dont vous récupérez les données dans le
<Child>
composant.Ici, j'ai laissé un exemple de code: https://jsfiddle.net/emq1ztqj/
J'espère que cela aide.
la source
<Child>
composant récupère les nouvelles donnéeshttps://jsonplaceholder.typicode.com/posts/1
et effectue un nouveau rendu.