我正在嘗試創建一個狀態,根據道具是否為空,它顯示某些組件的可見性。我使用了代碼中所示的 if 陳述句,但是,它會在發生太多重新渲染時產生錯誤。如果我設定默認讓 showComponents = false 或 true,一切正常。關于如何解決此問題的任何想法,因為組件的可見性取決于道具是否為空。
代碼:
const [showcComponents, setView] = useState(false);
...
if (props.params == undefined) {
setVisibility(false);
} else {
setVisibility(true);
}
uj5u.com熱心網友回復:
對于發送到您的組件的每個更新,您都在呼叫 setVisibility(false/true)。這可能會在創建渲染回圈時弄亂渲染方法。您應該盡量不要在鉤子之外呼叫函式。假設您有一個可見性變數,您可以嘗試:
...
useEffect(()=>{
if(props.params === undefined && visibility === true){
setVisibility(false);
}else if(props.params !== undefined && visibility === false){
setVisibility(true);
}
}, [props.params]
)
...
uj5u.com熱心網友回復:
此代碼將導致無限的重新渲染周期。因為每次組件渲染它都會呼叫setVisibility它將重新渲染組件
const [showcComponents, setView] = useState(false);
useEffect(()=>{
if (props.params == undefined) {
setVisibility(false);
} else {
setVisibility(true);
}
}, [props.params])
你也可以這樣寫更短:
useEffect(()=>{
setVisibility(props.params !== undefined);
}, [props.params])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/411767.html
標籤:
