Saya mencoba membuat komponen ApiWrapper yang bagus untuk mengisi data di berbagai komponen anak. Dari semua yang saya baca, ini seharusnya berfungsi: 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')
);
Namun untuk beberapa alasan, tampaknya komponen anak tidak diperbarui saat status induk berubah.
Apakah saya melewatkan sesuatu di sini?
nextProp
tidak akan memicu render ulang tanpacomponentWillReceiveProps(nextProps)
?static getDerivedStateFromProps(nextProps, prevState)
reactjs.org/docs/…Ada beberapa hal yang perlu Anda ubah.
Ketika
fetch
mendapat respon, itu bukan json. Saya sedang mencari bagaimana saya bisa mendapatkan json ini dan saya menemukan tautan ini .Di sisi lain, Anda perlu berpikir bahwa
constructor
fungsi tersebut dipanggil hanya sekali.Jadi, Anda perlu mengubah cara Anda mengambil data dalam
<Child>
komponen.Di sini, saya meninggalkan kode contoh: https://jsfiddle.net/emq1ztqj/
Saya harap itu membantu.
sumber
<Child>
komponen itu mengambil data baru darihttps://jsonplaceholder.typicode.com/posts/1
dan melakukan render ulang.