第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

使用長時(shí)間運(yùn)行的任務(wù)和合并狀態(tài)來反應(yīng)useEffect掛鉤

使用長時(shí)間運(yùn)行的任務(wù)和合并狀態(tài)來反應(yīng)useEffect掛鉤

手掌心 2021-05-10 12:37:24
我有一個(gè)場景,用戶可以使用拖放功能上傳文件。我將效果與空的空缺數(shù)組配合使用來設(shè)置RXJS訂閱,該訂閱處理已刪除的文件和上載時(shí)間:const [attachments, setAttachments] = useState([])useEffect(() => {    ...    fileUploadSubject.subscribe(newAttachments => {       setAttachments([...attachments,newAttachments])    })    ...    return () => {      subscriptions.forEach(s => {        s.unsubscribe()      })    }},[])問題是效果attachments與setAttachments功能以及功能都息息相關(guān)。如果添加attachments到依賴項(xiàng)數(shù)組,我將退訂現(xiàn)有的上載。另外,attachment狀態(tài)由于其關(guān)閉而不會在效果內(nèi)部更新。我該如何解決這樣的情況?我想到了多種方法,但似乎找不到簡單的方法。
查看完整描述

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ī)定。


查看完整回答
反對 回復(fù) 2021-05-27
?
白衣染霜花

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)。


查看完整回答
反對 回復(fù) 2021-05-27
  • 2 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號