You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The context API provides a mechanism for components to 'talk' to each other without passing around data and functions as props, or dispatching lots of events. It's an advanced feature, but a useful one.
7
+
context API は、データや関数をプロパティとして渡したり、たくさんのイベントをディスパッチしたりすることなく、コンポーネント同士で'会話'するための仕組みを提供します。これは高度ですが、便利な機能です。
8
8
9
-
Take this example app using a [Mapbox GL](https://docs.mapbox.com/mapbox-gl-js/overview/)map. We'd like to display the markers, using the `<MapMarker>`component, but we don't want to have to pass around a reference to the underlying Mapbox instance as a prop on each component.
There are two halves to the context API —`setContext`and`getContext`. If a component calls `setContext(key, context)`, then any _child_ component can retrieve the context with `const context = getContext(key)`.
The context object can be anything you like. Like [lifecycle functions](/tutorial/onmount), `setContext`and`getContext`must be called during component initialisation. Calling it afterwards - for example inside `onMount`- will throw an error. In this example, since `map`isn't created until the component has mounted, our context object contains a `getMap` function rather than `map` itself.
We can use anything as a key — we could do `setContext('mapbox', ...)`for example. The downside of using a string is that different component libraries might accidentally use the same one; using an object literal means the keys are guaranteed not to conflict in any circumstance (since an object only has referential equality to itself, i.e. `{} !== {}`whereas`"x" === "x"`), even when you have multiple different contexts operating across many component layers.
Contexts and stores seem similar. They differ in that stores are available to _any_ part of an app, while a context is only available to _a component and its descendants_. This can be helpful if you want to use several instances of a component without the state of one interfering with the state of the others.
0 commit comments