[英]In React 16.7, after setState call, getDerivedStateFromProps returning null is also updating state
[英]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
不是正確的生命周期掛鈎。 您需要將獲取代碼放入componentDidMount
和componentDidUpdate
,並在數據可用時使用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.