當變數的狀態第一次從null變為某物時,如何僅觸發一次useEffect?
在以下情況下,state.gender
從null
變為0
或1
。useEffect 僅應在第一次更改時觸發。0
此后,后續值之間的切換1
不應觸發 useEffect。
const [state, setState] = useState({
screen: 1,
gender: null,
});
useEffect(() => {
// Do something
})}
}, [state.gender]);
...
...
...
<RadioGroup
aria-labelledby="gender-group"
name="gender"
value={state.gender}
onChange={(event, fieldValue) => {handleInputChange(event, fieldValue, "gender")}}
>
<FormControlLabel value={1} control={<Radio />} label="Female" />
<FormControlLabel value={0} control={<Radio />} label="Male" />
</RadioGroup>
uj5u.com熱心網友回復:
你可以使用ref
a
const firedRef = useRef(false);
useEffect(() => {
if (firedRef.current || state.gender === null) return;
firedRef.current = true;
// rest of the code goes here
}, [state.gender]);
uj5u.com熱心網友回復:
如果您的初始值為null
,然后您只需在 和 之間切換0
,1
如果值為 ,則停止操作null
useEffect(() => {
if(state.gender !== null) return;
// Do something
}, [state.gender]);
uj5u.com熱心網友回復:
洗掉了 useEffect 并添加了 onClick 處理,該處理檢查之前狀態是否為空。在這種情況下不需要 useEffect,因為不需要持續監控狀態。
const handleGenderChange = (event, fieldValue) => {
//trigger geo only when gender changes from null to a value (1st time)
if(state.gender == null) {
attemptLocation();
}
//update gender state
handleInputChange(event, fieldValue, "gender")
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520561.html
標籤:反应