mirror of
https://github.com/zoriya/react-native-web.git
synced 2026-05-24 15:18:19 +00:00
committed by
Nicolas Gallagher
parent
e027829cdb
commit
5c1b5cfad2
@@ -10,7 +10,7 @@ eleventyNavigation:
|
||||
{% import "fragments/macros.html" as macro with context %}
|
||||
|
||||
:::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
|
||||
@@ -23,6 +23,10 @@ import { Appearance } from 'react-native';
|
||||
|
||||
### 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")') %}
|
||||
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 %}
|
||||
|
||||
@@ -37,7 +37,7 @@ const Appearance = {
|
||||
return query && query.matches ? 'dark' : 'light';
|
||||
},
|
||||
|
||||
addChangeListener(listener: AppearanceListener): void {
|
||||
addChangeListener(listener: AppearanceListener): { remove: () => void } {
|
||||
let mappedListener = listenerMapping.get(listener);
|
||||
if (!mappedListener) {
|
||||
mappedListener = ({ matches }: MediaQueryListEvent) => {
|
||||
@@ -48,16 +48,16 @@ const Appearance = {
|
||||
if (query) {
|
||||
query.addListener(mappedListener);
|
||||
}
|
||||
},
|
||||
|
||||
removeChangeListener(listener: AppearanceListener): void {
|
||||
const mappedListener = listenerMapping.get(listener);
|
||||
if (mappedListener) {
|
||||
if (query) {
|
||||
function remove(): void {
|
||||
const mappedListener = listenerMapping.get(listener);
|
||||
if (query && mappedListener) {
|
||||
query.removeListener(mappedListener);
|
||||
}
|
||||
listenerMapping.delete(listener);
|
||||
}
|
||||
|
||||
return { remove };
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -21,8 +21,8 @@ export default function useColorScheme(): ColorSchemeName {
|
||||
function listener(appearance) {
|
||||
setColorScheme(appearance.colorScheme);
|
||||
}
|
||||
Appearance.addChangeListener(listener);
|
||||
return () => Appearance.removeChangeListener(listener);
|
||||
const { remove } = Appearance.addChangeListener(listener);
|
||||
return remove;
|
||||
});
|
||||
|
||||
return colorScheme;
|
||||
|
||||
Reference in New Issue
Block a user