mirror of
https://github.com/lucide-icons/lucide.git
synced 2026-11-11 13:28:19 +00:00
* feat(packages): extract build logic to @lucide/shared, still wip * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * feat(packages): extract build logic to @lucide/shared, still wip * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * feat(): unify icon build logic some more, add nonScalingStroke option, marking absoluteStrokeWidth as deprecated * chore(icons): revert git hook changes made to icons * fix(packages/astro,react-native,vue): fix iconNode type fix(packages/vue): fix hasA11yProp * fix(packages/solid): make component reactive & add unit tests for checking prop changes * test(packages/vue): add reactivity tests to @lucide/vue * fix(packages): replace cpy-cli, accidentally removed during main merge * docs(packages): upgrade react documentation with nonScalingStroke * fix(tests): update snapshots for lucide-react * feat(docs): upgraded package guides with nonScalingStroke, dropping absoluteStrokeWidth * fix(vue,react-native): fix linting issues * fix(icons): add proper fallback for icon width in calculatedStrokeWidth * fix(packages/svelte): add globalProps.class to icons * fix(packages/shared): wrap width, height & size in isDefined * Update types.ts * fix(packages/svelte): do not pass propsClass to mergeClasses --------- Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
3.3 KiB
3.3 KiB
title, description
| title | description |
|---|---|
| Combining icons - React Native | Learn how to combine multiple icons into a single icon nested SVG elements in your React Native application. |
Combining icons
You can combine multiple icons into a single icon by nesting SVG elements. This is useful if you want to create custom icons by combining existing ones.
import React, {useState, useEffect} from 'react';
import { View, StyleSheet } from 'react-native';
import { Scan, User} from "lucide-react-native";
const App = () => {
return (
<View style={styles.container}>
<Scan size={48} nonScalingStroke>
<User
size={12}
x={6}
y={6}
nonScalingStroke
/>
</Scan>
</View>
);
};
const styles = StyleSheet.create({
container: {
height: '100%',
alignItems: 'center',
display: 'flex',
justifyContent: 'center'
},
});
export default App;
This is valid, since SVGs can be nested, and all SVG properties are supported on the icons.
The x and y coordinates can be adjusted to position the icons as you like.
::: info Limitation
When combining icons, you need to make sure that the x and y coordinates are within the viewBox of the outer icon (24x24).
:::
With native SVG elements
You can also combine Lucide icons with native SVG elements to build custom icon variations.
Example with notification badge
For example, you can add a notification badge to an icon by using the circle SVG element.
import React, {useState, useEffect} from 'react';
import { View, StyleSheet } from 'react-native';
import { Mail } from "lucide-react-native";
import { Circle } from 'react-native-svg';
const App = () => {
const hasUnreadMessages = true;
return (
<View style={styles.container}>
<Mail size={48}>
{hasUnreadMessages && (
<Circle
r="3"
cx="21"
cy="5"
stroke="none"
fill="#F56565"
/>
)}
</Mail>
</View>
);
};
const styles = StyleSheet.create({
container: {
height: '100%',
alignItems: 'center',
display: 'flex',
justifyContent: 'center'
},
});
export default App;
Example with text element
You can also use the text SVG element to add text to your icon.
import React, {useState, useEffect} from 'react';
import { View, StyleSheet } from 'react-native';
import { File } from "lucide-react-native";
import { Text } from 'react-native-svg';
const App = () => {
const hasUnreadMessages = true;
return (
<View style={styles.container}>
<File size={48}>
<Text
x={7.5}
y={19}
fontSize={8}
fontFamily="Verdana,sans-serif"
strokeWidth={1}
>
JS
</Text>
</File>
</View>
);
};
const styles = StyleSheet.create({
container: {
height: '100%',
alignItems: 'center',
display: 'flex',
justifyContent: 'center'
},
});
export default App;