米脂
2022-01-13 17:14:07
我有一個使用react-native-scrollable-tabview. 我有一個問題。該組件有 2 個道具:page和initialPage.第一次渲染組件時,我應該設置initialPage,否則它不起作用。但是,當再次渲染組件時,如果我更改initialPage它,它會進入新頁面(選項卡),但不會渲染它。但是,如果我設置它,page那么它就可以工作。所以這個想法是:第一次渲染?設置page為 undefined 和initialPageN。后續渲染?設置page為 N 和initialPage未定義。我嘗試使用這樣的標志狀態變量:const [firstRender, setFirstRender] = useState(true);let page = n;let initialPage = n;if(first){ page = undefined; setFirstRender(false);}else{ initialPage = undefined;}事情是,setFirstRender觸發器重新渲染所以它不起作用。但是,當我轉到另一個屏幕(使用反應導航)并返回時,它工作正常。有沒有辦法在firstRender不觸發重新渲染的情況下更新它?
2 回答

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
不確定這是否是您正在尋找的,但也許有useEffect幫助?
useEffect(() => {
setFirstRender(false);
}, []);
最后的數組是一個依賴項,它告訴函數只運行一次,您還可以在其中添加一個值,該值也僅在該值更改時運行。

ITMISS
TA貢獻1871條經驗 獲得超8個贊
看來您沒有在任何地方檢查您的狀態的價值。
例如這個條件:
if(first){
page = undefined;
setFirstRender(false);
}else{
initialPage = undefined;
}
應更改為依賴于 state 的值,您將其聲明為: (const [firstRender, setFirstRender] = useState(true);)
所以
if(firstRender){
page = undefined;
setFirstRender(false);
}else{
initialPage = undefined;
}
此外,您可能需要將此條件移動到 useEffect 中,它只會在第一個初始頁面渲染后更新。
useEffect(() => {
if (firstRender) {
setFirstRender(false) ...etc
添加回答
舉報
0/150
提交
取消