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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

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

Q&A

解決済

2回答

555閲覧

useStateをコンポーネント外で使用する方法が知りたいです

ARIA-0

総合スコア11

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

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

0グッド

1クリップ

投稿2023/02/01 01:09

実現したいこと

React学習中で、アプリを作成しております。
ルーティングを設定しているindex.jsxというファイル上で、useStateを使用したいです。

前提

すべてのページのルーティングを設定しているファイルであるindex.jsxでuseStateを作成し、useContextで別コンポーネントへ渡すことで、別コンポーネントからでもuseContextの更新を行いたいと思っております。

発生している問題

ソースコードにあるようにuseStateを記述したいと考えていたのですが、コンポーネント内ではないためかレンダリングができず画面が真っ白になってしまいます。
このような部分では、どのように記述すればuseStateが使えるのでしょうか?
JavascriptとReactは学習中のため記述方法の知識に乏しく、どのように解決すれば良いのかがわからなかったので、もしおわかりになるようでしたらご教授いただけないでしょうか。

ソースコードにある以下のコードは、useContextを使用できるかどうかを試すために書いたものです。

const favNumber = 10; const NumberContext = createContext(favNumber);

該当のソースコード

React

1import React, { createContext, useEffect, useState } from "react"; 2import ReactDOM from "react-dom/client"; 3〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 4 5const router = createBrowserRouter([ 6 { 7 path: "/", 8 element: <Layout />, 9 children: [ 10 { index: true, element: <TopPage /> }, 11〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 12 ], 13 }, 14]); 15 16const favNumber = 10; 17const NumberContext = createContext(favNumber); 18 19const [number, setNumber] = useState(); 20 21const rootElement = document.getElementById("root"); 22ReactDOM.createRoot(rootElement).render( 23 <NumberContext.Provider value={favNumber}> 24 <React.StrictMode> 25 <RouterProvider router={router} /> 26 </React.StrictMode> 27 </NumberContext.Provider> 28); 29 30export default NumberContext; 31

試したこと

ソースコードのuseStateを記述している部分に、新たにコンポーネントを作成してその中にuseStateを記述したりもしてみたのですが、その新たに作成したコンポーネントをどのように記述して呼び出せばいいのかがよくわからず、うまく動作するような記述方法は見つかりませんでした。

この部分でuseStateを使えるようにするためにはどのように記述すればよいのかがお分かりになる方がいらっしゃいましたら、教えていただけると幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

useStateフックは、コンポーネントの内部で使用することができ、外部では使用できません。また、あなたのコードでは、ReactDOM.createRoot を使用していますが、これはクライアントサイドレンダリングではなく、サーバーサイドレンダリングのためのものです。

以下は、コードを修正する方法の例です。

import React, { createContext, useState } from "react"; import { createBrowserRouter, RouterProvider } from "found"; const favNumber = 10; const NumberContext = createContext(favNumber); const App = () => { const [number, setNumber] = useState(); return ( <NumberContext.Provider value={favNumber}> <RouterProvider router={router} /> </NumberContext.Provider> ); }; const router = createBrowserRouter([ { path: "/", element: <Layout />, children: [ { index: true, element: <TopPage /> } ], }, ]); ReactDOM.render(<App />, document.getElementById("root")); export default NumberContext;

AIからの回答です。

投稿2023/02/01 01:21

yori3963

総合スコア17

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

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

maisumakun

2023/02/01 01:23

> ReactDOM.createRoot を使用していますが、これはクライアントサイドレンダリングではなく、サーバーサイドレンダリングのためのものです。 違いはそうではなく、React18以上での新しい書き方です。
guest

0

ベストアンサー

このような部分では、どのように記述すればuseStateが使えるのでしょうか?

不可能です。

stateを管理するために1つコンポーネントを作る(その中でNumberContext.Provider以下を描画する形にする)、というのが妥当です。

投稿2023/02/01 01:16

maisumakun

総合スコア145184

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

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

ARIA-0

2023/02/01 01:38

ありがとうございます! 新たにコンポーネントを作成し、その中でNumberContext.Provider以下を記述してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問