mirror of
https://github.com/zoriya/react-native-web.git
synced 2026-06-01 18:15:13 +00:00
committed by
Nicolas Gallagher
parent
e027829cdb
commit
5c1b5cfad2
@@ -10,7 +10,7 @@ eleventyNavigation:
|
|||||||
{% import "fragments/macros.html" as macro with context %}
|
{% import "fragments/macros.html" as macro with context %}
|
||||||
|
|
||||||
:::lead
|
:::lead
|
||||||
The Appearance module exposes information about the user's appearance preferences, such as their preferred color scheme (light or dark).
|
The Appearance module exposes information about the user's appearance preferences, such as their preferred color scheme (light or dark).
|
||||||
:::
|
:::
|
||||||
|
|
||||||
```js
|
```js
|
||||||
@@ -23,6 +23,10 @@ import { Appearance } from 'react-native';
|
|||||||
|
|
||||||
### Static methods
|
### Static methods
|
||||||
|
|
||||||
|
{% call macro.prop('addChangeListener', '(listener) => { remove: () => void }') %}
|
||||||
|
Add an event handler that is called with `{colorScheme: "dark" | "light"}` when appearance preferences change. Returns a `remove` method used to remove the change listener.
|
||||||
|
{% endcall %}
|
||||||
|
|
||||||
{% call macro.prop('getColorScheme', '() => ("dark" | "light")') %}
|
{% call macro.prop('getColorScheme', '() => ("dark" | "light")') %}
|
||||||
You can use the Appearance module to determine if the user prefers a dark color scheme. Although the color scheme is available immediately, this may change (e.g. scheduled color scheme change at sunrise or sunset). Any rendering logic or styles that depend on the user preferred color scheme should try to call this function on every render, rather than caching the value.
|
You can use the Appearance module to determine if the user prefers a dark color scheme. Although the color scheme is available immediately, this may change (e.g. scheduled color scheme change at sunrise or sunset). Any rendering logic or styles that depend on the user preferred color scheme should try to call this function on every render, rather than caching the value.
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ const Appearance = {
|
|||||||
return query && query.matches ? 'dark' : 'light';
|
return query && query.matches ? 'dark' : 'light';
|
||||||
},
|
},
|
||||||
|
|
||||||
addChangeListener(listener: AppearanceListener): void {
|
addChangeListener(listener: AppearanceListener): { remove: () => void } {
|
||||||
let mappedListener = listenerMapping.get(listener);
|
let mappedListener = listenerMapping.get(listener);
|
||||||
if (!mappedListener) {
|
if (!mappedListener) {
|
||||||
mappedListener = ({ matches }: MediaQueryListEvent) => {
|
mappedListener = ({ matches }: MediaQueryListEvent) => {
|
||||||
@@ -48,16 +48,16 @@ const Appearance = {
|
|||||||
if (query) {
|
if (query) {
|
||||||
query.addListener(mappedListener);
|
query.addListener(mappedListener);
|
||||||
}
|
}
|
||||||
},
|
|
||||||
|
|
||||||
removeChangeListener(listener: AppearanceListener): void {
|
function remove(): void {
|
||||||
const mappedListener = listenerMapping.get(listener);
|
const mappedListener = listenerMapping.get(listener);
|
||||||
if (mappedListener) {
|
if (query && mappedListener) {
|
||||||
if (query) {
|
|
||||||
query.removeListener(mappedListener);
|
query.removeListener(mappedListener);
|
||||||
}
|
}
|
||||||
listenerMapping.delete(listener);
|
listenerMapping.delete(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return { remove };
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ export default function useColorScheme(): ColorSchemeName {
|
|||||||
function listener(appearance) {
|
function listener(appearance) {
|
||||||
setColorScheme(appearance.colorScheme);
|
setColorScheme(appearance.colorScheme);
|
||||||
}
|
}
|
||||||
Appearance.addChangeListener(listener);
|
const { remove } = Appearance.addChangeListener(listener);
|
||||||
return () => Appearance.removeChangeListener(listener);
|
return remove;
|
||||||
});
|
});
|
||||||
|
|
||||||
return colorScheme;
|
return colorScheme;
|
||||||
|
|||||||
Reference in New Issue
Block a user