亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

React 避免重新渲染 useState

React 避免重新渲染 useState

米脂 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);

}, []);

最后的數組是一個依賴項,它告訴函數只運行一次,您還可以在其中添加一個值,該值也僅在該值更改時運行。


查看完整回答
反對 回復 2022-01-13
?
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


查看完整回答
反對 回復 2022-01-13
  • 2 回答
  • 0 關注
  • 413 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號