useTheme等效于类组件

问题描述 投票:0回答:1

我想在班级组件中使用当前主题。

根据最新(RN 5.x)文档,为此目的有一个useTheme()钩子。但是,它没有提到任何等效的类。

我在RN 4.x中发现了ThemeContext.Consumer,但在5.x中不再可用。

对于类组件,是否可以通过其他方式达到useTheme()的效果?

react-native react-navigation react-navigation-v5
1个回答
0
投票

这不是很优雅,但是它将为您完成工作。

这是我在类组件中访问主题的方法:

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
}
© www.soinside.com 2019 - 2024. All rights reserved.