@emotion/native
✏️ Edit this pageStyle and render React Native components using emotion
Install
npm install @emotion/react @emotion/native
or if you use yarn
yarn add @emotion/react @emotion/native
This package also depends on react
, react-native
and prop-types
so make sure you’ve them installed.
Example
import React from 'react'
import { AppRegistry } from 'react-native'
import styled, { css } from '@emotion/native'
const Container = styled.View`
display: flex;
justify-content: center;
align-items: center;
margin: 50px;
`
const Description = styled.Text({
color: 'hotpink'
})
const Image = styled.Image`
padding: 40px;
`
const emotionLogo =
'https://cdn.rawgit.com/emotion-js/emotion/master/emotion.png'
class App extends React.Component {
render() {
return (
<Container
style={css`
border-radius: 10px;
`}
>
<Description style={{ fontSize: 45, fontWeight: 'bold' }}>
Emotion Primitives
</Description>
<Image
source={{
uri: emotionLogo,
height: 150,
width: 150
}}
/>
</Container>
)
}
}
AppRegistry.registerComponent('ExampleApp', () => App)
Theming
Use @emotion/react
for theming support.
import React from 'react'
import styled, { css } from '@emotion/native'
import { ThemeProvider } from '@emotion/react'
const theme = {
color: 'hotpink',
backgroundColor: 'purple'
}
const Container = styled.View`
display: flex;
justify-content: center;
align-items: center;
margin: 50px;
border: 5px solid red;
background-color: ${props => props.theme.backgroundColor};
`
const Description = styled.Text({
color: 'hotpink'
})
const Image = styled.Image`
padding: 40px;
`
const emotionLogo =
'https://cdn.rawgit.com/emotion-js/emotion/master/emotion.png'
class App extends React.Component {
render() {
return (
<ThemeProvider theme={theme}>
<Container
style={css`
border-radius: 10px;
`}
>
<Description style={{ fontSize: 45, fontWeight: 'bold' }}>
Emotion Primitives
</Description>
<Image
source={{
uri: emotionLogo,
height: 150,
width: 150
}}
/>
</Container>
</ThemeProvider>
)
}
}
Gotchas
- Note that the
flex
property works like CSS shorthand, and not the legacyflex
property in React Native. Settingflex: 1
setsflexShrink
to1
in addition to settingflexGrow
to1
andflexBasis
to0
.
Usage with react-360
@emotion/native
can also be used with react-360
for styling VR applications. Check out this guide for setting up a react-360
project.
Example
import React from 'react'
import { AppRegistry, StyleSheet, Text, View } from 'react-360'
import styled from '@emotion/native'
const StyledName = styled.Text`
font-size: 40px;
color: hotpink;
`
export default class App extends React.Component {
render() {
return (
<View style={styles.panel}>
<View style={styles.greetingBox}>
<StyledName>Emotion Native</StyledName>
</View>
</View>
)
}
}
const styles = StyleSheet.create({
panel: {
// Fill the entire surface
width: 1000,
height: 600,
backgroundColor: 'rgba(255, 255, 255, 0.4)',
justifyContent: 'center',
alignItems: 'center'
},
greetingBox: {
padding: 20,
backgroundColor: '#000000',
borderColor: '#639dda',
borderWidth: 2
},
greeting: {
fontSize: 30
}
})
AppRegistry.registerComponent('App', () => App)