2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
setState函數(shù)useState支持功能更新形式:
const [attachments, setAttachments] = useState([])
useEffect(() => {
...
const subscription = fileUploadSubject.subscribe(newAttachments => {
setAttachments((oldAttachments) => [...oldAttachments, newAttachments])
})
...
return () => subscription.unsubscribe()
}, [setAttachments, fileUploadSubject])
可以從不更改的功能(即此處兩個(gè)功能)可以在依賴項(xiàng)列表中省略,但是我更喜歡列出它們,以免忘記某些依賴項(xiàng)。對此有嚴(yán)厲的規(guī)定。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果我將附件添加到依賴項(xiàng)數(shù)組,我將退訂現(xiàn)有的上載
不確定為什么取消訂閱,不熟悉 fileUploadSubject.subscribe
另外,由于關(guān)閉狀態(tài),附件狀態(tài)不會在效果內(nèi)更新
您可以useReducer代替useState,而無需依賴效果中的狀態(tài)。
也許是這樣的:
function reducer(state, action) {
switch (action.type) {
case "ADD_ATTACH":
return [...state, action.payload];
default:
throw new Error();
}
}
function App() {
const [attachments, dispatch] = useReducer(reducer, []);
useEffect(() => {
// ...
fileUploadSubject.subscribe(newAttachments => {
dispatch({ type: "ADD_ATTACH", payload: newAttachments });
});
// ...
return () => {
subscriptions.forEach(s => {
s.unsubscribe();
});
};
}, [/*fileUploadSubject?, subscriptions? */]);
return <div>{ /* some UI */ }</div>;
}
我仍然認(rèn)為您的效果不依賴任何東西是很奇怪的,請確保subscriptions并且fileUploadSubject確實(shí)不應(yīng)該將其放置在dependencies數(shù)組內(nèi)。
添加回答
舉報(bào)