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

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

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

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

React.js

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

Q&A

解決済

1回答

16181閲覧

react 共通で使いたい関数

cheche0830

総合スコア187

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2018/02/06 05:36

<App> <A> <B></B> </A> </App>

上記のようなコンポーネント構造があった場合、
Aの
var A = React.createClass({});
で定義した関数(メソッド)を
AppでもBでも使いたいのですが、
その場合どのように書いたり、ファイルを管理したりしたら
良いのでしょうか?
現状わからず、同じ関数をAにもBにも書いている状態です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

JSでは関数とメソッドは明確に区別されています。

  • 関数: 単体で存在する
  • メソッド: インスタンスに紐付く

現状わからず、同じ関数をAにもBにも書いている状態です。

今回のケースはインスタンスに依存していないようですね。
この場合のケースならば関数が適切でしょう。

Reactを実用しているならBrowserifyやWebpackを利用していますか?
そうであれば、ES6モジュールによる外部ファイルの読み込み機能を使いましょう。
ただ、ES6モジュールの考え方は少々難解なので、もし初耳ならぐぐったりしてES6やES6モジュールやその使い方を調査してみてください。

また、あまり推奨ではないですがグローバル変数領域で関数として宣言する方法もあります。
JSでは関数や変数を利用した時に、そのスコープ内に無ければ外のスコープと辿っていき、最終的にはグローバル変数を確認する仕様になっています。


【コメント部分】

Webpack使ってるなら話が速いですね。

JavaScript

1import React from 'react'; 2import A from './A.js'; // このファイルに外出ししたい 3var B = React.createClass({ 4 getWindowSize:function() { 5 // 共通化したい処理 6 }, 7 render:function() { 8 return () 9 } 10});

importすると、そのスコープのA変数に外出しした関数が詰まっています。
なので下記のように修正します。

A.js

JavaScript

1export default function () { 2 // 共通化したい処理 3}

本編

JavaScript

1import React from 'react'; 2import A from './A.js'; 3var B = React.createClass({ 4 getWindowSize: A, // 共通化した関数Aを指定 5 render:function() { 6 return () 7 } 8});

投稿2018/02/06 06:33

編集2018/02/06 07:22
miyabi-sun

総合スコア21203

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

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

cheche0830

2018/02/06 06:58

webpackを使用しています。 import React from 'react'; import A from './A.js'; のような感じで外部コンポーネントを読み込んでおります。 現状、 import React from 'react'; import A from './A.js'; var B = React.createClass({ getWindowSize:function() { }, render:function() { return () } }); のような感じで書いているのですが、 getWindowSize:function() { }, 部分をA.jsに書けば、Bの方にはいちいち書かなくても 使えるということでしょうか?
cheche0830

2018/02/06 09:15

ありがとうございます!!! そのような書き方ができるのですね。重ね重ね申し訳ありませんが、 読み込みたい関数が複数ある場合はひとつずつファイルを分ける幹事でしょうか??
miyabi-sun

2018/02/06 09:17

そうです。 1関数1ファイルにしておくと、関数=ファイルとしてディレクトリで管理出来るようになります。 また個別にimportして動作を実行するNode.jsのコードを書いてテストが出来るので捗ります。
cheche0830

2018/02/06 13:57

ありがとうございまーす!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問