簡體   English   中英

在getDerivedStateFromProps中進行API調用后返回狀態

[英]Returning state after API call inside getDerivedStateFromProps

我有一個反應組件,從其父級接收用於過濾的道具。 當父道具更改時,我在以下代碼中使用getDerivedStateFromProps中的getDerivedStateFromProps

static getDerivedStateFromProps(props, state) {
  if (props.filter === null) {
     return state;
  }

  const { name, description } = props.filter;

  ApiService.get("cards", { name: name, description: description })
    .then(response => {
      console.log("get request returned ", response.data);

      return { cards: response.data };
    }
  );
}

在控制台中, response.data日志是對象的適當數組。 但是狀態不會更新,並且呈現功能仍使用舊cards陣列,而不使用從ApiService響應接收到的ApiService 如何使cards陣列正確更新,以便在下一次渲染時顯示已過濾的卡片?

getDerivedStateFromProps不是正確的生命周期掛鈎。 您需要將獲取代碼放入componentDidMountcomponentDidUpdate ,並在數據可用時使用this.setState

class Example extends React.Component {
  constructor(props) {
    super(props); 
    this.state = {
      cards: null,
    }
  }

  componentDidMount() {
    this.loadData();
  }

  componentDidUpdate(prevProps) {
    if (this.props.filter !== prevProps.filter) {
      this.loadData();
    }
  }

  loadData() {
    const { name, description } = this.props.filter;

    ApiService.get("cards", { name: name, description: description })
      .then(response => {
        this.setState({ cards: response.data });
      });
  )

  render() {
    if (!this.state.cards) {
      return <div>Loading...</div>
    }

    return (
      // some jsx using the cards
    )
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM