简体   繁体   English

React Native:将状态/上下文代码从功能组件转换为 Class 组件

[英]React Native: Convert State/Context code from Functional Component to Class Component

I have a simple React-Native app setup in which I use Context to share some data throughout components.我有一个简单的 React-Native 应用程序设置,其中我使用 Context 在整个组件中共享一些数据。 I have some code setup for functional components but I would like to convert it to Class component code.我有一些功能组件的代码设置,但我想将其转换为 Class 组件代码。 Anyone who could help me further?谁能进一步帮助我?

All that needs to be changed is the way context in de screens and state is handled.所有需要更改的是屏幕和 state 中的上下文处理方式。

UserContext.js (this one doesn't need changing just putting it here for context.) UserContext.js(这个不需要更改,只需将其放在这里作为上下文。)

import { createContext } from 'react'

export const UserContext = createContext(null);

AccountScreen.js AccountScreen.js

export default function AccountScreen() {
    const { User, setUser } = useContext(UserContext);

    return (
        <View>
            <Text>ID: {User}</Text>
        </View>
    )
}

App.js应用程序.js

export default function App() {

  const [User, setUser] = useState("yessir");

    return (
      <UserContext.Provider value={{User, setUser}}>
        <PaperProvider theme={theme}>
          <NavigationContainer>
            <Stack.Navigator>
              <Stack.Screen name="Register" component={RegisterScreen} options={{ headerShown: false}}/>
              <Stack.Screen name="Login" component={LoginScreen} options={{ headerShown: false}}/>
              <Stack.Screen name="Home" component={Home} options={{ headerShown: false }} />
            </Stack.Navigator>
          </NavigationContainer>
        </PaperProvider>
      </UserContext.Provider>
    );
}

A simple way is to write a higher-order component (HOC) with can provide user context props to any component.一种简单的方法是编写一个高阶组件(HOC),可以为任何组件提供用户上下文道具。


import { createContext } from "react";

export const UserContext = createContext(null);

const withUserContext = (Component) => {
  return (
    <UserContext.Consumer>
      {(userContext) => {
        return <Component userContext={userContext} />;
      }}
    </UserContext.Consumer>
  );
};

export default withUserContext;


AccountScreen.js AccountScreen.js

import React from "react";
import withUserContext from "./withUserContext";

class AccountScreen extends React.Component {
  render() {
    const { User, setUser } = this.props.userContext;
    return (
      <View>
        <Text>ID: {User}</Text>
      </View>
    );
  }
}

export default withUserContext(Account);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM