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

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

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

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

React.js

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

Q&A

解決済

1回答

2251閲覧

reactのコンポーネントの設計について

pumper

総合スコア33

JavaScript

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

React.js

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

0グッド

2クリップ

投稿2018/07/22 10:46

# 背景
現在reactを使ってwebアプリケーションを作成しようとしています.しかしどのようにコンポーネントを設計するかわからなかったのでネットで調べてみるとブログに出会いました.

このブログの筆者はコンポーネントの設計について以下のように言っています.

内部関数で子Componentをrenderしない.
悪い例

javascript

1class Layout extends React.Component { 2 renderHeader() { 3 return <header/> 4 } 5 render() { 6 return <div> 7 {this.renderHeader()} 8 {this.props.children} 9 </div> 10 } 11}

そして責務に則って分割すべき.

良い例

javascript

1function Header() { 2 return <header/> 3} 4 5function Layout({children}) { 6 return <div> 7 <Header/> 8 {children} 9 </div> 10}

ここで疑問なのですかここでいう責務とは何なのでしょうか?

悪い例で挙げられているソースコードはheaderコンポーネントをレンダーする責務と子コンポーネントをレンダーする責務の2つの責務を1つのクラスが担ってしまっているからよくないということなのでしょうか.

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

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

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

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

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

guest

回答1

0

ベストアンサー

参考にされたブログの筆者ではないので、私的な意見、になるのですが・・・

Layoutというコンポーネントは、名前からすると、なんらかの「要素」の「配置」を司るもの、という意図があると思います。

悪い例の場合、Headerという「要素」の中身を、Layoutの中で構成している(例ではHeaderだけなのでピンと来にくいかもしれませんが・・・)のが、「配置」という責務を超えているという、意味合いだと思います。

Headerの中身が、複雑になった場合(stateやReduxの情報からレンダリングする)、悪い例では、Layout
コンポーネントに実装が増えますが、その内容は「配置」ではないと思います。

凝集度という観点では、責務を一つに絞り込むのが好ましいとは思いますが、現実の実装では、状況によって複数の責務を持つことはあるように思います(もちろん絞り込むに越したことはありませんが・・・)。大事なのは、名前から想像できる責務を超える仕事をしてしまわないこと、のように感じます。

たとえば、悪い例のコンポーネント名が、Layoutではなく、Pageのような名前なら、そんなに悪いことでもない気がします。(冒頭に断った通り、個人的な意見ですので、違う見解は多々あると思います。)

投稿2018/07/23 00:45

Meganezaru

総合スコア715

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

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

pumper

2018/07/23 02:08

なるほど!!! わかりやす説明ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問