Nativebase has proved to be an instrumental library for making appealing user interfaces in React Native. Button, one of its many components, can be customized to suit the design desired.
To customize a button, we add a prop to it. The Button component provides many props. We will be looking at some of them in this shot.
size: This determines the size of the button displayed. It can take values such as xs, sm, md, and lg.
import React from "react"
import { Button, Center, NativeBaseProvider } from "native-base"
export default () => {
return (
<NativeBaseProvider>
<Center flex={1}>
<Button size="sm">
BUTTON
</Button>
</Center>
</NativeBaseProvider>
)
}
startIcon: This is used to include icons at the beginning of the button. We can get icons from icon libraries.
import React from "react"
import { Button, Icon, Center, NativeBaseProvider } from "native-base"
import { Ionicons } from "@expo/vector-icons"
export default () => {
return (
<NativeBaseProvider>
<Center flex={1}>
<Button
startIcon={<Icon as={Ionicons} name="mail" size={5}/> }
>
Start
</Button>
</Center>
</NativeBaseProvider>
)
}
endIcon: This is used to include icons to the end of the button. Icons from external libraries can be used.
import React from "react"
import { Button, Icon, Center, NativeBaseProvider } from "native-base"
import { Ionicons } from "@expo/vector-icons"
export default () => {
return (
<NativeBaseProvider>
<Center flex={1}>
<Button
endIcon={<Icon as={Ionicons} name="arrow-forward" size={4} />}
>
End
</Button>
</Center>
</NativeBaseProvider>
)
}
colorScheme : This is used to change the color of the button. The default is primary.
import React from "react"
import { Button, Center, NativeBaseProvider } from "native-base"
export default () => {
return (
<NativeBaseProvider>
<Center flex={1}>
<Button
colorScheme="secondary"
>
End
</Button>
</Center>
</NativeBaseProvider>
)
}
isLoading: This is used to show a spinner in the button.
import React from "react"
import { Button, Center, NativeBaseProvider } from "native-base"
export default () => {
return (
<NativeBaseProvider>
<Center flex={1}>
<Button
isLoading
>
Loading
</Button>
</Center>
</NativeBaseProvider>
)
}
isLoadingText: This is used with isLoading. It overrides any text used within the button.
import React from "react"
import { Button, Center, NativeBaseProvider } from "native-base"
export default () => {
return (
<NativeBaseProvider>
<Center flex={1}>
<Button
isLoading
isLoadingText="This shows"
>
Loading
</Button>
</Center>
</NativeBaseProvider>
)
}
variant: This is used to change the variant of the button. It could take values such as solid, outline, ghost, link, and unstyled.
The default is solid.
import React from "react"
import { Button, Center, NativeBaseProvider } from "native-base"
export default () => {
return (
<NativeBaseProvider>
<Center flex={1}>
<Button
variant="outline"
>
End
</Button>
</Center>
</NativeBaseProvider>
)
}
_text: This is used to style the child’s text.
import React from "react"
import { Button, Center, NativeBaseProvider } from "native-base"
export default () => {
return (
<NativeBaseProvider>
<Center flex={1}>
<Button
colorScheme="green"
_text={{
color: "white",
}}
>
Educative
</Button>
</Center>
</NativeBaseProvider>
)
}
isDisabled: This is used to toggle the disabled feature of the button. If present, the button would be disabled.
import React from "react"
import { Button, Center, NativeBaseProvider } from "native-base"
export default () => {
return (
<NativeBaseProvider>
<Center flex={1}>
<Button
isDisabled
>
Disabled
</Button>
</Center>
</NativeBaseProvider>
)
}
ref: This can also be used to customize a button. This is possible with the use of useRef
import React from "react"
import { Button, Center, NativeBaseProvider } from "native-base"
export const Educative = () => {
const el = React.useRef({})
React.useEffect(() => {
el?.current.setNativeProps({
borderWidth: 25,
opacity: 0.7,
borderRadius: 4,
})
}, [el])
return (
<Button size="md" variant={"solid"} ref={el}>
Ref
</Button>
)
}
export default () => {
return (
<NativeBaseProvider>
<Center flex={1}>
<Educative />
</Center>
</NativeBaseProvider>
)
}