質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

888閲覧

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

yuki_90453

総合スコア326

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2020/07/20 09:02

編集2020/07/20 09:48

概要

Reactにて描画についてつまずいております。

該当コード

return cognitoUser ? (<Redirecting />) : nextAuthState === '' ? <SignUp /> : nextAuthState === 'ConfirmSignUp' ? <Verification /> : <p>想定外</p>

処理内容、ログイン済みであれば、Redirectingを呼び
未登録の場合、SignUpを呼び
2段階認証のメールを確認時にはVerificationを呼ぶといった具合です、

エラー

エラー本文
「Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.」
和訳
「マウントされていないコンポーネントで React の状態更新を実行できません。これはダメですが、アプリケーションのメモリリークを示しています。修正するには、useEffect クリーンアップ関数ですべてのサブスクリプションと非同期タスクをキャンセルしてください。」

(追記)エラーが表示されるタイミング

return cognitoUser ? (<Redirecting />) : nextAuthState === '' ? <SignUp /> : nextAuthState === 'ConfirmSignUp' ? <Verification /> // ここがtrueになった時 : <p>想定外</p>

エラーが表示されるタイミングとして<SignUp />から<Verification />へ描画が変わったタイミングでエラーが表示されます。

質問

useEffectを使用してコンポーネントを返すようにしてみましたが型エラーで上手く書けませんでした。
どのようにすれば良いかアドバイスお願い致します。

追記

SingUpコンポーネントは下記のようになっています。

function SignUp(){ const [email, setEmail] = React.useState<string>('') const [password, setPassword] = React.useState<string>('') const [family_name,setFamily_name] = React.useState<string>('') const [given_name, setGiven_name] = React.useState<string>('') const changedEmailHandler = (event:any) => setEmail(event.target.value) const changedPasswordHandler = (event:any) => setPassword(event.target.value) const changedFnameHandler = (event:any) => setFamily_name(event.target.value) const changedGnameHandler = (event:any) => setGiven_name(event.target.value) const signUp = () => { const attributeList = [ new CognitoUserAttribute({ Name:'email', Value: email }), new CognitoUserAttribute({ Name:'family_name', Value: family_name }), new CognitoUserAttribute({ Name: 'given_name', Value: given_name }) ] userPool.signUp(email, password, attributeList, [], (err, result)=> { if(err) { console.log(err) return } setNextAuthState('ConfirmSignUp') setEmail('') setPassword('') setFamily_name('') setGiven_name('') }) } return( <div className="SignUp"> <h1 style={{ textAlign: 'left' }}>SignUp_hey</h1> <input type="text" placeholder="email" onChange={changedEmailHandler} /> <input type="text" placeholder="password" onChange={changedPasswordHandler} /> <input type="text" placeholder="性" onChange={changedFnameHandler} /> <input type="text" placeholder="名" onChange={changedGnameHandler} /> <button onClick={signUp}>SignUp</button> </div> ) }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/07/20 09:04

「Can't perform a React state update on an unmounted component.」は、「どのコンポーネント」で発生したエラーなのかなど、さらなる詳細は表示されていませんでしたか?
yuki_90453

2020/07/20 09:08

該当行はこの行となっております。 : nextAuthState === '' ? <SignUp /> このSignUpのコンポーネントがメモリーをリークしている可能性はありますか?
guest

回答1

0

自己解決

アンマウントされてしまっていたようです。

投稿2021/04/23 08:33

yuki_90453

総合スコア326

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問