React 在 componentDidUpdate 中获取新数据



我有一个组件,它从两个或三个API接收新闻列表。 组件首次呈现时,将调用 API,并以 componentDidMount 格式呈现数据 像这样:

componentDidMount() {
        this.state.platforms.forEach((platform, i) => {
            let objToSend = {
                phrase: this.props.searchParams.phrase,
                // this is the main place when input data changes
                ...this.props.searchParams.general_params,
                ...this.props.searchParams.platforms[i].api_params,
                stringPath: platform,
                apiPath: this.props.searchParams.platforms[i].apiPath,
            }
            this.props.loadData(objToSend)
            // this is the api call using redux which sends data as props to this component
 }

new当短语更改时,我希望此组件重新渲染并重新运行组件DidMount,但它不起作用,因为组件DidMount将运行一次。所以我使用了componentDidUpdate,但由于有很多调用,所以api正在继续更新。

如何使组件重新渲染并重新运行组件每次更改短语时都DidMount

您可以使用componentDidUpdate参数(previousPropspreviousState)来检查是否发生了一些新的更改。

componentDidUpdate(previousProps, previousState) {
    if (previousProps.phrase !== this.props.phrase) {
        //Do whatever needs to happen!
    }
}

我以这种方式停止了无限循环。

这是

重新渲染时执行something()的一种方法。

import React, { Component } from 'react';
import { render } from 'react-dom';
const fakeFetch = (n) => {
  console.log(`Doing fake fetch: ${n}`)
  return n
}
class App extends Component {
  state = {
    value: false,
    number: 0,
  }
  componentDidMount() {
    const number = fakeFetch(this.state.number + 1);
    this.setState({ number })
  }
  componentDidUpdate(prevProps, prevState) {
    if (prevState.value !== this.state.value) {
      const number = fakeFetch(this.state.number + 1);
      this.setState({ number })
    }
  }
  toggle = () => {
    this.setState(({ value }) => ({ value: !value }))
  }
  render() {
    return (
      <React.Fragment>
        <h1>Number: {this.state.number}</h1>
        <button onClick={this.toggle}>re-render</button>
      </React.Fragment>
    );
  }
}
render(<App />, document.getElementById('root'));

活生生的例子在这里。

相关内容

  • 没有找到相关文章

最新更新