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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

React.js

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

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Q&A

1回答

900閲覧

TypeError: SignUp is not a functionエラーにより、ログイン機能が実装できない

tomsuma

総合スコア38

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

React.js

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

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

0グッド

0クリップ

投稿2020/08/31 14:05

編集2020/09/01 08:46

TypeError: SignUp is not a functionエラーが消えません

プログラミング初心者です
Next.jsを用いたログイン機能のを実装していまして、
SignIn画面には問題なく移行できるのですが、

サインインボタンを押すとエラーが起きます

参考資料
next.jsログイン機能

.envやnext.config.jsも作ったのですがもしかして余計ですか?

-example でwith firebaseを使っています

ターミナルでのエラー react-dom.development.js?61bb:475 Uncaught TypeError: SignUp is not a function at handleSubmit (SignUp.js?b395:11) at HTMLUnknownElement.callCallback (react-dom.development.js?61bb:336) at Object.invokeGuardedCallbackDev (react-dom.development.js?61bb:385) at invokeGuardedCallback (react-dom.development.js?61bb:440) at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js?61bb:454) at executeDispatch (react-dom.development.js?61bb:584) at executeDispatchesInOrder (react-dom.development.js?61bb:609) at executeDispatchesAndRelease (react-dom.development.js?61bb:713) at executeDispatchesAndReleaseTopLevel (react-dom.development.js?61bb:722) at forEachAccumulated (react-dom.development.js?61bb:694) at runEventsInBatch (react-dom.development.js?61bb:739) at runExtractedPluginEventsInBatch (react-dom.development.js?61bb:880) at handleTopLevel (react-dom.development.js?61bb:5803) at batchedEventUpdates$1 (react-dom.development.js?61bb:24401) at batchedEventUpdates (react-dom.development.js?61bb:1415) at dispatchEventForPluginEventSystem (react-dom.development.js?61bb:5894) at attemptToDispatchEvent (react-dom.development.js?61bb:6010) at dispatchEvent (react-dom.development.js?61bb:5914) at unstable_runWithPriority (scheduler.development.js?3069:697) at runWithPriority$2 (react-dom.development.js?61bb:12149) at discreteUpdates$1 (react-dom.development.js?61bb:24417) at discreteUpdates (react-dom.development.js?61bb:1438) at dispatchDiscreteEvent (react-dom.development.js?61bb:5881) Failed to launch editor: TypeError: editor.toLowerCase is not a function
SignUp.js import React, { useContext } from "react"; import { AuthContext } from "./AuthProvider"; import { withRouter } from 'next/router' const SignUp = ( ) => { const SignUp = useContext(AuthContext); const handleSubmit = event => { event.preventDefault(); const { email, password } = event.target.elements; SignUp(email.value, password.value); console.log(SignUp) }; return ( <div> <h1>Sign up</h1> <form onSubmit={handleSubmit}> <label> Email <input name="email" type="email" placeholder="Email" /> </label> <label> Password <input name="password" type="password" placeholder="Password" /> </label> <button type="submit">Sign Up</button> </form> </div> ); }; export default withRouter(SignUp);
AuthProvider.jsx import React, { useEffect, useState } from "react"; // contextの作成 export const AuthContext = React.createContext(); export const AuthProvider = ({ children }) => { const [currentUser, setCurrentUser] = useState(null); // ユーザーをログインさせる関数 const Login = async (email, password) => { try { await app.auth().signInWithEmailAndPassword(email, password); router.push("/"); } catch (error) { alert(error); } }; // 新しいユーザーを作成しログインさせる関数 const SignUp = async (email, password, history) => { try { await app.auth().createUserWithEmailAndPassword(email, password); router.push("/"); } catch (error) { alert(error); } }; useEffect(() => { app.auth().onAuthStateChanged(setCurrentUser); }, []); return ( // Contextを使用して認証に必要な情報をコンポーネントツリーに流し込む。 <AuthContext.Provider value={{ Login: Login, SignUp: SignUp, currentUser }} > {children} </AuthContext.Provider> ); };

userContext.js

import { useState, useEffect, createContext, useContext } from 'react' import firebase from '../firebase/clientApp' export const UserContext = createContext() export default function UserContextComp({ children }) { const [user, setUser] = useState(null) const [loadingUser, setLoadingUser] = useState(true) // Helpful, to update the UI accordingly. useEffect(() => { // Listen authenticated user const unsubscriber = firebase.auth().onAuthStateChanged(async (user) => { try { if (user) { // User is signed in. const { uid, displayName, email } = user // You could also look for the user doc in your Firestore (if you have one): // const userDoc = await firebase.firestore().doc(`users/${uid}`).get() setUser({ uid, displayName, email }) } else setUser(null) } catch (error) { // Most probably a connection error. Handle appropriately. } finally { setLoadingUser(false) } }) // Unsubscribe auth listener on unmount return () => unsubscriber() }, []) return ( <UserContext.Provider value={{ user, setUser, loadingUser ,setLoadingUser}}> {children} </UserContext.Provider> ) } // Custom hook that shorhands the context! export const useUser = () => useContext(UserContext)

また、next.config.jsこの記事を読んでconfigにも自身がなくなりました、

require("dotenv").config(); const path = require("path"); const Dotenv = require("dotenv-webpack"); module.exports = { webpack: config => { config.plugins = config.plugins || []; config.plugins = [ ...config.plugins, // Read the .env file new Dotenv({ path: path.join(__dirname, ".env"), systemvars: true }) ]; return config; } };
検証ツールにて index.esm.js?abfd:106 [2020-09-01T01:16:47.798Z] @firebase/app: Warning: Firebase is already defined in the global scope. Please make sure Firebase library is only loaded once.

イメージ説明

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

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

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

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

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

y_waiwai

2020/08/31 23:39

で、しつもんはなんでしょうか
tomsuma

2020/08/31 23:43

タイトルを修正させてもらいました
guest

回答1

0

createLogin は関数ではない、とおっしゃっています。

関数でないものを実行させようとしているからそう出ていますね

投稿2020/09/01 00:51

y_waiwai

総合スコア88042

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

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

tomsuma

2020/09/01 00:58

ご回答ありがとうございます! 大変初心者の質問で申し訳ないのですが 上記の const Login = useContext(AuthContext); ではダメということでしょうか? console.logで値が取れているか確かめたいのですが、 どこに仕込めばいいですか?
y_waiwai

2020/09/01 01:03

そう変更したら、エラーメッセージはどうなりますか? タイトルに書いてあるエラーがいぜんでているということでしょうか。 #いまだなにをききたいのかわかってません
tomsuma

2020/09/01 01:06

ご回答ありがとうございます! すみません、、 もう少し詳しく書かせてもらいます
tomsuma

2020/09/01 01:11

只今修正させてもらいました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問