React useEffectの原因:マウントされていないコンポーネントでReact状態の更新を実行できません

ライアンサム:

データをフェッチすると、次のようになります。マウントされていないコンポーネントでReact状態の更新を実行できません。アプリは引き続き機能しますが、反応すると、メモリリークが発生している可能性があります。

「これは何もしませんが、アプリケーションのメモリリークを示しています。修正するには、useEffectクリーンアップ関数ですべてのサブスクリプションと非同期タスクをキャンセルしてください。」

この警告が表示され続けるのはなぜですか?

私はこれらの解決策を研究してみました:

https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal

https://developer.mozilla.org/en-US/docs/Web/API/AbortController

しかし、これはまだ私に警告を与えていました。

const  ArtistProfile = props => {
  const [artistData, setArtistData] = useState(null)
  const token = props.spotifyAPI.user_token

  const fetchData = () => {
    const id = window.location.pathname.split("/").pop()
    console.log(id)
    props.spotifyAPI.getArtistProfile(id, ["album"], "US", 10)
    .then(data => {setArtistData(data)})
  }
  useEffect(() => {
    fetchData()
    return () => { props.spotifyAPI.cancelRequest() }
  }, [])

  return (
    <ArtistProfileContainer>
      <AlbumContainer>
        {artistData ? artistData.artistAlbums.items.map(album => {
          return (
            <AlbumTag
              image={album.images[0].url}
              name={album.name}
              artists={album.artists}
              key={album.id}
            />
          )
        })
        : null}
      </AlbumContainer>
    </ArtistProfileContainer>
  )
}

編集:

私のapiファイルにを追加して、リクエストをキャンセルできるようにAbortController()を使用しましたsignal

export function spotifyAPI() {
  const controller = new AbortController()
  const signal = controller.signal

// code ...

  this.getArtist = (id) => {
    return (
      fetch(
        `https://api.spotify.com/v1/artists/${id}`, {
        headers: {"Authorization": "Bearer " + this.user_token}
      }, {signal})
      .then(response => {
        return checkServerStat(response.status, response.json())
      })
    )
  }

  // code ...

  // this is my cancel method
  this.cancelRequest = () => controller.abort()
}

spotify.getArtistProfile()はこのように見えます

this.getArtistProfile = (id,includeGroups,market,limit,offset) => {
  return Promise.all([
    this.getArtist(id),
    this.getArtistAlbums(id,includeGroups,market,limit,offset),
    this.getArtistTopTracks(id,market)
  ])
  .then(response => {
    return ({
      artist: response[0],
      artistAlbums: response[1],
      artistTopTracks: response[2]
    })
  })
}

しかし、私の信号は、APIで解決される個々のAPI呼び出しに使用されるため、その約束Promise.allはできないabort()ので、常に状態を設定します。

ᆼᆺᆼ:

リクエストAbortController間での共有はfetch()正しいアプローチです。
ときに任意のPromiseSが中止されている、Promise.all()と拒否されますAbortError

function Component(props) {
  const [fetched, setFetched] = React.useState(false);
  React.useEffect(() => {
    const ac = new AbortController();
    Promise.all([
      fetch('http://placekitten.com/1000/1000', {signal: ac.signal}),
      fetch('http://placekitten.com/2000/2000', {signal: ac.signal})
    ]).then(() => setFetched(true))
      .catch(ex => console.error(ex));
    return () => ac.abort(); // Abort both fetches on unmount
  }, []);
  return fetched;
}
const main = document.querySelector('main');
ReactDOM.render(React.createElement(Component), main);
setTimeout(() => ReactDOM.unmountComponentAtNode(main), 1); // Unmount after 1ms
<script src="//cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.development.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.development.js"></script>
<main></main>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

マウントされていないコンポーネントのuseEffectエラーでReact状態の更新を実行できません

分類Dev

useEffect-マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

ReactマウントされていないコンポーネントエラーでReact状態の更新を実行できません

分類Dev

React-Native:警告:マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

React:マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

ReactNativeマウントされていないコンポーネントのFirebaseでReact状態の更新を実行できません

分類Dev

反応中のマウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

警告の取得:マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

Reactjsおよびfirestoreでマウントされていないコンポーネントに対してReact状態の更新を実行できません

分類Dev

反応フック。マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

警告:マウントされていないコンポーネントでReact状態の更新を実行することはできません

分類Dev

ReactJSとRedux:マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

マウントされていないコンポーネントでReact状態の更新を実行できませんか?

分類Dev

ReactJS:マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

修正方法:警告:マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

ReactSpring「マウントされていないコンポーネントでReact状態の更新を実行できません」

分類Dev

Google Analytics:警告:マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

マウントされていないコンポーネントでReact状態の更新を実行できません。useEffect内のすべてのタスクをキャンセルします

分類Dev

useEffectにisCancelledフラグを追加しましたが、「マウントされていないコンポーネントでReact状態の更新を実行できません...」

分類Dev

Reactテストライブラリ:テスト内の更新がact(...)でラップされておらず、マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

警告:マウントされていないコンポーネントでReact状態の更新を実行することはできません。機能コンポーネント内

分類Dev

「マウントされていないコンポーネントでReact状態の更新を実行できない」エラーを修正

分類Dev

「警告:マウントされていないコンポーネントでReact状態の更新を実行できません」という警告を解決するにはどうすればよいですか?setInterval関数から?

分類Dev

「警告:マウントされていないコンポーネントでReact状態の更新を実行できません」という警告を解決するにはどうすればよいですか?setInterval関数から?

分類Dev

マウントされていないコンポーネントでReact状態の更新を実行できません。これはノーオペレーションです-MobX関連

分類Dev

エラーメッセージが表示されます警告:マウントされていないコンポーネントでReact状態の更新を実行できません

分類Dev

マウントされていないコンポーネントでReact状態の更新を実行できません-間隔をクリアしている場合でも

分類Dev

警告:SceneView(Pagerによって作成された)で、マウントされていないコンポーネントに対してReact状態の更新を実行できません

Related 関連記事

  1. 1

    マウントされていないコンポーネントのuseEffectエラーでReact状態の更新を実行できません

  2. 2

    useEffect-マウントされていないコンポーネントでReact状態の更新を実行できません

  3. 3

    ReactマウントされていないコンポーネントエラーでReact状態の更新を実行できません

  4. 4

    React-Native:警告:マウントされていないコンポーネントでReact状態の更新を実行できません

  5. 5

    React:マウントされていないコンポーネントでReact状態の更新を実行できません

  6. 6

    ReactNativeマウントされていないコンポーネントのFirebaseでReact状態の更新を実行できません

  7. 7

    反応中のマウントされていないコンポーネントでReact状態の更新を実行できません

  8. 8

    警告の取得:マウントされていないコンポーネントでReact状態の更新を実行できません

  9. 9

    Reactjsおよびfirestoreでマウントされていないコンポーネントに対してReact状態の更新を実行できません

  10. 10

    反応フック。マウントされていないコンポーネントでReact状態の更新を実行できません

  11. 11

    警告:マウントされていないコンポーネントでReact状態の更新を実行することはできません

  12. 12

    ReactJSとRedux:マウントされていないコンポーネントでReact状態の更新を実行できません

  13. 13

    マウントされていないコンポーネントでReact状態の更新を実行できませんか?

  14. 14

    ReactJS:マウントされていないコンポーネントでReact状態の更新を実行できません

  15. 15

    修正方法:警告:マウントされていないコンポーネントでReact状態の更新を実行できません

  16. 16

    ReactSpring「マウントされていないコンポーネントでReact状態の更新を実行できません」

  17. 17

    Google Analytics:警告:マウントされていないコンポーネントでReact状態の更新を実行できません

  18. 18

    マウントされていないコンポーネントでReact状態の更新を実行できません

  19. 19

    マウントされていないコンポーネントでReact状態の更新を実行できません。useEffect内のすべてのタスクをキャンセルします

  20. 20

    useEffectにisCancelledフラグを追加しましたが、「マウントされていないコンポーネントでReact状態の更新を実行できません...」

  21. 21

    Reactテストライブラリ:テスト内の更新がact(...)でラップされておらず、マウントされていないコンポーネントでReact状態の更新を実行できません

  22. 22

    警告:マウントされていないコンポーネントでReact状態の更新を実行することはできません。機能コンポーネント内

  23. 23

    「マウントされていないコンポーネントでReact状態の更新を実行できない」エラーを修正

  24. 24

    「警告:マウントされていないコンポーネントでReact状態の更新を実行できません」という警告を解決するにはどうすればよいですか?setInterval関数から?

  25. 25

    「警告:マウントされていないコンポーネントでReact状態の更新を実行できません」という警告を解決するにはどうすればよいですか?setInterval関数から?

  26. 26

    マウントされていないコンポーネントでReact状態の更新を実行できません。これはノーオペレーションです-MobX関連

  27. 27

    エラーメッセージが表示されます警告:マウントされていないコンポーネントでReact状態の更新を実行できません

  28. 28

    マウントされていないコンポーネントでReact状態の更新を実行できません-間隔をクリアしている場合でも

  29. 29

    警告:SceneView(Pagerによって作成された)で、マウントされていないコンポーネントに対してReact状態の更新を実行できません

ホットタグ

アーカイブ