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

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

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

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

React.js

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

Q&A

2回答

2489閲覧

[React / JS] 関数内で生成したデータ(変数)を関数外で使いたい

DaisukeMori

総合スコア226

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2020/08/03 01:58

編集2020/08/03 04:06

要件

関数内で生成したデータ(変数)を関数外で使いたいですが
どう書いたら使えますか?

以下ではうまくいきません。

id変数にpropsで渡ってきたデータを入れたい。

js

1const propid = (props) => { 2 const {id} = props.match.params; 3 console.log(id); 4} 5 6const id = propid;

追記

下記コードはconst pref = 'PREF28';の部分で兵庫県エリアを直書きで指定しています。
こちらを親から~/:idで渡したパラメータを変数として入れたい。
ただHyogo関数内にしかpropsで受け渡したデータを使用することができません。
また試しにconst keyId〜検索クエリ一式をHyogo関数内に入れるとうまくfetchしてくれません。

なのでやったこととしては、const keyIdの前で新たにpropsを呼び出す関数をつくればいけるかと思ったのですが、
回答のコードで試してもundefiedで値が取得できませんでした。

jsx

1// import省略 2 3const keyId = 'your_key'; // ぐるなびAPI KEY 4const pref = 'PREF28'; // 現在こちらを直書きでエリア指定しています 5const hitPerPage = 99; // 件数(Max100) 6const lunch = 0; // 0 or 1 7const takeout = 1; // 0 or 1 8const bento = 1; // 0 or 1 9const deliverly = 0; // 0 or 1 10 11// 検索クエリ 12const URL = `https://api.gnavi.co.jp/RestSearchAPI/v3/? 13keyid=${keyId}& 14pref=${pref}& 15hit_per_page=${hitPerPage}& 16lunch=${lunch}& 17takeout=${takeout}& 18bento=${bento}& 19deliverly=${deliverly}`; 20 21const Hyogo = (props) => { 22 const [articles, setArticles] = useState([]); 23 24 useEffect(() => { 25 fetchArticles(); 26 }, []); 27 28 const fetchArticles = async () => { 29 try { 30 const res = await axios.get(URL); 31 setArticles(res.data.rest); 32 } catch (error) { 33 console.error(error); 34 } 35 } 36 37 return ( 38 <div className="article"> 39 {/* 省略 */} 40 </div> 41 ); 42} 43 44export default Hyogo; 45

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

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

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

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

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

anozon

2020/08/03 14:29

表示してるページの URL の :id を取り出したいという意味であっていますか? routingライブラリは何を使っていますか? 例えば react-router-dom でしたら props.match はトップのcomponent でしか取り出せません 代わりに import { useParams } from "react-router-dom"; ↓component内 let { id } = useParams(); などで取り出せます
guest

回答2

0

const { id } = propid(props)

というふうに呼び出すのでは駄目ですか?

投稿2020/08/03 02:04

anozon

総合スコア662

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

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

0

constではなくletで宣言する方法もあります。

javascript

1let id; 2 3const propid = (props) => { 4 id = props.match.params.id; 5 console.log(id); 6} 7

もっとも、呼び出し方や使い方を考えた場合に、「これでは動かない」あるいは「もっと良い書き方がある」となる可能性もあります。

投稿2020/08/03 02:15

maisumakun

総合スコア146018

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

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

DaisukeMori

2020/08/03 02:53

console.log(id);を関数内ではなく関数外で使う方法はありませんか?
maisumakun

2020/08/03 02:55

上のコードで、そのままconsole.log(id);を関数外に移すこともできます。
DaisukeMori

2020/08/03 04:01

すみません。具体的に今やってることを追記しました。 よろしくお願いします。 もちろんpropsの受け渡し出なくてもHyogoコンポーネントを丸っとコピーして47都道府県分(47ファイル)作ることは可能ですが、個人開発だからいいですが、もし案件開発になった際それだとメンテナンスに工数が増大したりデータの肥大化につながるのであまりしたくありませんとかいうか絶対したくありません。
maisumakun

2020/08/03 04:38 編集

でしたら、逆にURLをコンポーネント内で生成する形が適当なのではないでしょうか? (idはコンポーネントに紐づくものである以上、その外側で処理に使おうという考え方そのものが適切ではないです)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問