我想在班级组件中使用当前主题。
根据最新(RN 5.x)文档,为此目的有一个useTheme()钩子。但是,它没有提到任何等效的类。
我在RN 4.x中发现了ThemeContext.Consumer,但在5.x中不再可用。
对于类组件,是否可以通过其他方式达到useTheme()的效果?
这不是很优雅,但是它将为您完成工作。
这是我在类组件中访问主题的方法:
import React from 'react'
import { SafeAreaView, Text } from 'react-native'
import { useTheme } from '@react-navigation/native'
export default class Home extends React.Component {
constructor(props) {
super(props)
this.state = {
theme: undefined
}
}
setTheme = theme => {
this.setState({theme})
}
render () {
console.log('theme', this.state.theme)
return (
<SafeAreaView>
<SetTheme setTheme={this.setTheme} />
<Text>Hello world</Text>
</SafeAreaView>
)
}
}
const SetTheme = ({ setTheme }) => {
const theme = useTheme()
React.useEffect(() => {
setTheme(theme)
return () => null
},[])
return null
}