Я пытаюсь создать хороший компонент ApiWrapper для заполнения данных в различных дочерних компонентах. Из всего, что я прочитал, это должно сработать: 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')
);
Но по какой-то причине кажется, что дочерний компонент не обновляется при изменении родительского состояния.
Я что-то упустил?
nextProp
запускается повторный рендерингcomponentWillReceiveProps(nextProps)
?static getDerivedStateFromProps(nextProps, prevState)
моментаЕсть кое-что, что вам нужно изменить.
Когда
fetch
получите ответ, это не json. Я искал, как мне получить этот json, и обнаружил эту ссылку .С другой стороны, вы должны думать, что
constructor
функция вызывается только один раз.Итак, вам нужно изменить способ получения данных в
<Child>
компоненте.Здесь я оставил пример кода: https://jsfiddle.net/emq1ztqj/
Надеюсь, это поможет.
источник
<Child>
компонент извлекает новые данныеhttps://jsonplaceholder.typicode.com/posts/1
и выполняет их повторную визуализацию.