父状态更改后,React子组件未更新

reactjs React.js

Gil米亚

2020-03-12

我正在尝试制作一个不错的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')
);

但是由于某种原因,当父状态更改时,子组件似乎没有更新。

我在这里想念什么吗?

第1169篇《父状态更改后,React子组件未更新》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

1个回答
Tom阳光 2020.03.12

您需要更改某些内容。

fetch得到的回应,它不是一个JSON。我一直在寻找如何获取这个json,然后发现了这个链接

另一方面,您需要考虑该constructor函数仅被调用一次。

因此,您需要更改在<Child>组件中检索数据的方式

在这里,我留下了一个示例代码:https : //jsfiddle.net/emq1ztqj/

希望对您有所帮助。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android