我有一個 PostImagesList 組件,它會在洗掉影像時更新。如果最終提交更新后,我還將洗掉的影像 ID 發送給父級以進行洗掉。
我試圖理解為什么道具函式(onRemoveImage)會殺死 setImages useState 鉤子,除非我兩次洗掉相同的影像(?)目前在父級中,我只記錄從子級發送的 id,因此資料沒有任何變化.
// <PostImagesList />
const handleRemoveImage = (e, idx, imageId) => {
e.stopPropagation();
let newFilesArr = [...images];
newFilesArr.splice(idx, 1);
setImages(newFilesArr);
onRemoveImage(imageId); // If I comment this out, the setImages updates correctly
};
images 最初是在一個 useEffect 掛鉤中的 PostImagesList 中設定的:
useEffect(() => {
setImages(
imagesByPostId?.edges
? imagesByPostId?.edges
.filter(Boolean)
.map((edge) => edge.node)
.filter(Boolean)
: [],
);
};
uj5u.com熱心網友回復:
我看不到你在哪里宣告 setImages 但如果你想設定初始狀態,你可以這樣做:
const [state, setState] = React.useState(whatever)
如果要根據復雜條件進行設定,則可以使用 React.useReducer 而不是 React.useState 或定義初始狀態,例如:
const [state, setState] = React.useState(() => {
if (itsCool) return "cool";
else return "not cool";
});
如果你需要使用那個 useEffect 鉤子并且你想在初始渲染時設定一些東西,那么你需要傳遞一個空的依賴陣列,否則你可能會遇到“超過最大更新深度”,因為 setState 會重復呼叫。所以這樣做:
useEffect(() => {
setImages(
imagesByPostId?.edges
? imagesByPostId?.edges
.filter(Boolean)
.map((edge) => edge.node)
.filter(Boolean)
: [],
);
}, []); // here is the empty dependency array
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/419535.html
標籤:
上一篇:我的Firebase存盤中的下載URL未傳輸到資料庫
下一篇:ReactJS不渲染任何東西
