Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
気になる細かい表現を修正
  • Loading branch information
fsubal committed Feb 2, 2019
commit e2aa1c52fcd124f0202c7302985d41dee56b3a63
14 changes: 7 additions & 7 deletions content/docs/portals.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ title: ポータル
permalink: docs/portals.html
---

ポータルは、親コンポーネントの DOM 階層の外にある DOM ノードに対して、子コンポーネントを描画するための第一級の方法を提供します。
ポータルは、親コンポーネントの DOM 階層外にある DOM ノードに対して、子コンポーネントを描画するための第一級の方法を提供します。

```js
ReactDOM.createPortal(child, container)
Expand All @@ -14,7 +14,7 @@ ReactDOM.createPortal(child, container)

## 使い方

通常、コンポーネントの `render` メソッドから要素を返すと、最も近い親ノードの子要素として DOM にマウントされます。
通常、コンポーネントの `render` メソッドから要素を返すと、最も近い親ノードの子として DOM にマウントされます。

```js{4,6}
render() {
Expand All @@ -40,7 +40,7 @@ render() {
}
```

典型的なポータルのユースケースは、親要素が `overflow: hidden` や `z-index` のスタイルを持っているものの、子要素がコンテナを「飛び出して」いるように見せたいようなものです。例えば、ダイアログ、ホバーカード、ツールチップがそれに当たります。
典型的なポータルのユースケースは、親要素が `overflow: hidden` や `z-index` のスタイルを持っていても、子要素にはコンテナを「飛び出して」いるように見えて欲しいようなものです。例えば、ダイアログ、ホバーカード、ツールチップがそれに当たります。

> 補足
>
Expand All @@ -54,7 +54,7 @@ render() {

ポータルは DOM ツリーのどこにでもありうるとはいえ、他の点では通常の React の子要素と同じように振る舞います。コンテクスト (context) のような機能は、たとえ子要素がポータルだろうと完全に同じように動きます。というのも、 **DOM ツリー**上の位置にかかわらず、ポータルは依然として **React のツリー**内にいるからです。

これにはイベントのバブリングも含まれます。ポータルの内部から発行されたイベントは **React のツリー**内の祖先へと伝播します。たとえそれが **DOM ツリー** 上では祖先でなくともです。
これにはイベントのバブリングも含まれます。ポータルの内部から発行されたイベントは **React のツリー**内の祖先へと伝播します。たとえそれが **DOM ツリー**上では祖先でなくともです。

次のような HTML 構造があったとして、

Expand All @@ -67,7 +67,7 @@ render() {
</html>
```

`#app-root` 内にある `Parent` コンポーネントは、 `#modal-root` 内のコンポーネントから伝播したイベントがキャッチされなかった場合に、それをキャッチできます
`#app-root` 内にある `Parent` コンポーネントは、 `#modal-root` 内のコンポーネントから伝播したイベントが捕捉されなかった場合に、それを捕捉できます

```js{28-31,42-49,53,61-63,70-71,74}
// この 2 つのコンテナは DOM 上の兄弟要素とします
Expand All @@ -85,7 +85,7 @@ class Modal extends React.Component {
// つまり、子要素は一旦どこにも結びつかない DOM ノードへとマウントされるということです。
// もし子コンポーネントがマウント後すぐに DOM ツリーに結びついてほしい ――
// たとえば DOM ノードの大きさを測りたい、子孫要素で `autoFocus` を使いたいなど
// ―― 場合は、 Modal に状態を持たせて子要素が DOM ツリーに入ったときだけ描画されるようにしましょう
// ―― 場合は、 Modal に状態を持たせて子要素が DOM ツリーに入ったときだけ描画されるようにします
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(、)が多すぎてすごいことになりそうだったのでつい ―― を入れてしまいましたが、他に良い書き方があれば直したい気もします

modalRoot.appendChild(this.el);
}

Expand Down Expand Up @@ -149,4 +149,4 @@ ReactDOM.render(<Parent />, appRoot);

[**Try it on CodePen**](https://codepen.io/gaearon/pen/jGBWpE)

ポータルから浮上したイベントが親コンポーネントでキャッチできるということは、より柔軟な抽象を、本質的にポータルに依存しない形で開発できるということです。たとえば `<Modal />` コンポーネントをレンダーして、親コンポーネントがそこから来るイベントを捕捉するのは、`<Modal />` の実装がポータルを使っているかに関係なくできます。
ポータルから伝播したイベントが親コンポーネントで捕捉できるということは、より柔軟な抽象を、本質的にポータルに依存しない形で開発できるということです。たとえば `<Modal />` コンポーネントをレンダーして、親コンポーネントがそこから来るイベントを捕捉するのは、`<Modal />` の実装がポータルを使っているかに関係なくできます。