在react組件開發中,遇到需要請求接口來判斷展示組件A或者B,但由於react生命周期函數,組件第一次render的時候,接口還沒有返回數據,無法確定render什么組件。此時,新增一個布爾值狀態isResOk: false,如果isResOk為false,請求沒有成功,則不展示任何組件;如果isResOk為true,請求成功,再根據接口返回值判斷展示哪一個組件。
在render函數里面,通過條件1進行判斷接口是否返回:
(1)接口沒有返回,那么return false,不渲染任何組件;
(2)接口有返回,通過條件2判斷展示哪個組件。
1 class A extends Component { 2 static propTypes = { 3 children: PropTypes.any, 4 isShowInfo: PropTypes.func, 5 } 6 state = { 7 isShow: true, 8 isResOk: false, 9 } 10 11 componentDidMount() { 12 const { isShowInfo } = this.props 13 isShowInfo().then(res => { 14 this.setState({ 15 isShow: res.Displayed, 16 isResOk: true, 17 }) 18 }) 19 } 20 21 renderTitleNotic = () => { 22 return ( 23 <strong>提醒:</strong> 24 ) 25 } 26 27 render() { 28 const { children } = this.props 29 const { isShow, isResOk } = this.state 30 if (isResOk) { 31 return isShow ? children : this.renderTitleNotic() 32 } else { 33 return false 34 } 35 } 36 } 37 export default A
備注:
嘗試過,如果請求接口還未返回數據時,調用Loading組件,會存在第一次render為Loading組件,請求接口返回數據,更新數據后render為A||B組件 ;會導致Loading組件卸載的時候,在更新數據,造成內存泄漏問題。