Skip to content

Commit

Permalink
Translate createContext
Browse files Browse the repository at this point in the history
  • Loading branch information
natsuokawai committed Jul 19, 2023
1 parent df4ed23 commit fd608af
Showing 1 changed file with 34 additions and 35 deletions.
69 changes: 34 additions & 35 deletions src/content/reference/react/createContext.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ title: createContext

<Intro>

`createContext` lets you create a [context](/learn/passing-data-deeply-with-context) that components can provide or read.
`createContext` は、コンポーネントが提供または読み取りできる [コンテクスト](/learn/passing-data-deeply-with-context) を作成するための関数です。

```js
const SomeContext = createContext(defaultValue)
Expand All @@ -16,38 +16,38 @@ const SomeContext = createContext(defaultValue)

---

## Reference {/*reference*/}
## リファレンス {/*reference*/}

### `createContext(defaultValue)` {/*createcontext*/}

Call `createContext` outside of any components to create a context.
`createContext` をコンポーネントの外部で呼び出してコンテクストを作成します。

```js
import { createContext } from 'react';

const ThemeContext = createContext('light');
```

[See more examples below.](#usage)
[下にさらに例があります。](#usage)

#### Parameters {/*parameters*/}
#### パラメータ {/*parameters*/}

* `defaultValue`: The value that you want the context to have when there is no matching context provider in the tree above the component that reads context. If you don't have any meaningful default value, specify `null`. The default value is meant as a "last resort" fallback. It is static and never changes over time.
* `defaultValue`: コンポーネントがコンテクストを読み取るときに、その上のツリー内で対応するコンテクストプロバイダがない場合にコンテクストが持つ値です。デフォルト値が必要ない場合には `null` を指定します。デフォルト値は "最後の手段" として使われるように意図されています。これは静的な値であり、時間とともに変更されません。

#### Returns {/*returns*/}
#### 返り値 {/*returns*/}

`createContext` returns a context object.
`createContext` はコンテクストオブジェクトを返します。

**The context object itself does not hold any information.** It represents _which_ context other components read or provide. Typically, you will use [`SomeContext.Provider`](#provider) in components above to specify the context value, and call [`useContext(SomeContext)`](/reference/react/useContext) in components below to read it. The context object has a few properties:
**コンテクストオブジェクト自体は情報を持っていません。**他のコンポーネントがどのコンテクストを読み取るか、または提供するかを表します。通常、上位のコンポーネントで `SomeContext.Provider` を使用してコンテクストの値を指定し、下位のコンポーネントで `useContext(SomeContext)` を呼び出してコンテクストを読み取ります。コンテクストオブジェクトにはいくつかのプロパティがあります:

* `SomeContext.Provider` lets you provide the context value to components.
* `SomeContext.Consumer` is an alternative and rarely used way to read the context value.
* `SomeContext.Provider` では、コンポーネントにコンテクストの値を提供できます。
* `SomeContext.Consumer` は、コンテクストの値を読み取るための方法ですが、あまり使用されません。

---

### `SomeContext.Provider` {/*provider*/}

Wrap your components into a context provider to specify the value of this context for all components inside:
コンポーネントをコンテクストプロバイダでラップすると、内部のコンポーネントに対してこのコンテクストの値を指定できます。

```js
function App() {
Expand All @@ -63,13 +63,13 @@ function App() {

#### Props {/*provider-props*/}

* `value`: The value that you want to pass to all the components reading this context inside this provider, no matter how deep. The context value can be of any type. A component calling [`useContext(SomeContext)`](/reference/react/useContext) inside of the provider receives the `value` of the innermost corresponding context provider above it.
* `value`: プロバイダ内のコンテクストを読み取るコンポーネントに渡したい値です。どんなに深くても構いません。コンテクストの値は任意の型にすることができます。プロバイダ内で `useContext(SomeContext)` を呼び出しているコンポーネントは、それより上位の最も内側の対応するコンテクストプロバイダの `value` を受け取ります。

---

### `SomeContext.Consumer` {/*consumer*/}

Before `useContext` existed, there was an older way to read context:
`useContext` が存在する前には、コンテクストを読み取る古い方法がありました:

```js
function Button() {
Expand All @@ -84,7 +84,7 @@ function Button() {
}
```

Although this older way still works, but **newly written code should read context with [`useContext()`](/reference/react/useContext) instead:**
この古い方法はまだ動作しますが、**新しく書かれたコードは `useContext()` を使ってコンテクストを読み取るべきです:**

```js
function Button() {
Expand All @@ -96,17 +96,17 @@ function Button() {

#### Props {/*consumer-props*/}

* `children`: A function. React will call the function you pass with the current context value determined by the same algorithm as [`useContext()`](/reference/react/useContext) does, and render the result you return from this function. React will also re-run this function and update the UI whenever the context from the parent components changes.
* `children`: 関数です。React は、`useContext()` と同じアルゴリズムによって定まる現在のコンテクスト値で関数を呼び出し、その関数から返される結果をレンダーします。親コンポーネントからのコンテクストが変更されると、React はこの関数を再実行し、UI を更新します。

---

## Usage {/*usage*/}
## 使用法 {/*usage*/}

### Creating context {/*creating-context*/}
### コンテクストの作成 {/*creating-context*/}

Context lets components [pass information deep down](/learn/passing-data-deeply-with-context) without explicitly passing props.
コンテクストを利用することで、明示的に props を渡さずに、コンポーネントに深くまで [情報を渡す](/learn/passing-data-deeply-with-context) ことができます。

Call `createContext` outside any components to create one or more contexts.
コンポーネントの外部で `createContext` を呼び出して、コンテクストを 1 つまたは複数個作成します。

```js [[1, 3, "ThemeContext"], [1, 4, "AuthContext"], [3, 3, "'light'"], [3, 4, "null"]]
import { createContext } from 'react';
Expand All @@ -115,7 +115,7 @@ const ThemeContext = createContext('light');
const AuthContext = createContext(null);
```

`createContext` returns a <CodeStep step={1}>context object</CodeStep>. Components can read context by passing it to [`useContext()`](/reference/react/useContext):
`createContext` <CodeStep step={1}>コンテクストオブジェクト</CodeStep> を返します。それを `useContext()` に渡すことで、コンポーネントからコンテクストを読み取ることができます:

```js [[1, 2, "ThemeContext"], [1, 7, "AuthContext"]]
function Button() {
Expand All @@ -129,9 +129,9 @@ function Profile() {
}
```

By default, the values they receive will be the <CodeStep step={3}>default values</CodeStep> you have specified when creating the contexts. However, by itself this isn't useful because the default values never change.
デフォルトでは、コンポーネントが受け取る値は、コンテクストを作成するときに指定した <CodeStep step={3}>デフォルトの値</CodeStep> になります。しかし、デフォルトの値は決して変わらないため、これ自体では役に立ちませんね。

Context is useful because you can **provide other, dynamic values from your components:**
コンテクストが便利なのは、**コンポーネントから動的な値を提供できる**からです:

```js {8-9,11-12}
function App() {
Expand All @@ -150,15 +150,15 @@ function App() {
}
```

Now the `Page` component and any components inside it, no matter how deep, will "see" the passed context values. If the passed context values change, React will re-render the components reading the context as well.
これで、`Page` コンポーネントとその内部のすべてのコンポーネントは、どんなに深くても、渡されたコンテクストの値を "見る" ことができます。渡されたコンテクストの値が変更されると、React はコンテクストを読み取るコンポーネントを再レンダーします。

[Read more about reading and providing context and see examples.](/reference/react/useContext)
[コンテクストの読み取りと提供、例についてさらに読む。](/reference/react/useContext)

---

### Importing and exporting context from a file {/*importing-and-exporting-context-from-a-file*/}
### ファイルからのコンテクストのインポートとエクスポート {/*importing-and-exporting-context-from-a-file*/}

Often, components in different files will need access to the same context. This is why it's common to declare contexts in a separate file. Then you can use the [`export` statement](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export) to make context available for other files:
異なるファイルにあるコンポーネントが同じコンテクストにアクセスする必要があることがよくあります。これが、別のファイルでコンテクストを宣言することが一般的な理由です。他のファイルでコンテクストを利用できるようにするために、[`export` ](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export) を使用できます:

```js {4-5}
// Contexts.js
Expand All @@ -168,7 +168,7 @@ export const ThemeContext = createContext('light');
export const AuthContext = createContext(null);
```

Components declared in other files can then use the [`import`](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/import) statement to read or provide this context:
他のファイルで宣言されたコンポーネントは、[`import`](https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/import) 文を使用して、このコンテクストを読み取ったり、提供したりすることができます:

```js {2}
// Button.js
Expand Down Expand Up @@ -196,22 +196,21 @@ function App() {
}
```

This works similar to [importing and exporting components.](/learn/importing-and-exporting-components)
これは [コンポーネントのインポートとエクスポート](/learn/importing-and-exporting-components) と同様に動作します。

---

## Troubleshooting {/*troubleshooting*/}
## トラブルシューティング {/*troubleshooting*/}

### I can't find a way to change the context value {/*i-cant-find-a-way-to-change-the-context-value*/}
### コンテクストの値を変更する方法が見つからない {/*i-cant-find-a-way-to-change-the-context-value*/}


Code like this specifies the *default* context value:
このようなコードは *デフォルト* のコンテクストの値を指定します:

```js
const ThemeContext = createContext('light');
```

This value never changes. React only uses this value as a fallback if it can't find a matching provider above.
この値は決して変わりません。React は、対応するプロバイダを上位のコンポーネントで見つけられない場合にのみ、この値をフォールバックとして使用します。

To make context change over time, [add state and wrap components in a context provider.](/reference/react/useContext#updating-data-passed-via-context)
コンテクストを時間とともに変更するためには、[state を追加し、コンポーネントをコンテクストプロバイダでラップします。](/reference/react/useContext#updating-data-passed-via-context)

0 comments on commit fd608af

Please sign in to comment.