React native - 创建一个可以在 2 个或更多屏幕之间共享的通用功能

Posted

技术标签:

【中文标题】React native - 创建一个可以在 2 个或更多屏幕之间共享的通用功能【英文标题】:React native - create one common function that can be shared between 2 or more screens 【发布时间】:2022-01-21 20:53:16 【问题描述】:

我有 2 个屏幕,SignUpScreen 和 CreateCommunityScreen,这两个屏幕有一个图标,只要单击该图标,就会调用相同的函数 pickImage。如何为两个屏幕创建一个功能?到目前为止,这是我所拥有的,但我遇到了错误“错误:您试图在一个本应不可变且已被冻结的对象上设置键 _V 和值 1。”提前致谢。

pickImage函数

import * as ImagePicker from "expo-image-picker";

const pickImage = async () => 
  let imageURI = "";
  const  status  = await ImagePicker.requestMediaLibraryPermissionsAsync();

  if (status === "granted") 
    let selectedImage = await ImagePicker.launchImageLibraryAsync(
      allowsEditing: true,
      aspect: [4, 3],
      quality: 1,
    );

    if (!selectedImage.cancelled) 
      imageURI = selectedImage.uri;
    

    return imageURI;
  
;

export default pickImage;

注册屏幕

import React,  useState  from "react";
import  View, Text, Image, StyleSheet  from "react-native";
import AppBrand from "../../component/AppBrand";
import AuthenticationForm from "../../component/AuthenticationForm";
import CustomButtonLink from "../../component/CustomButtonLink";
import DefaultProfileIcon from "../../component/DefaultProfileIcon";
import pickImage from "../../helper/pickImage";

const SignUpScreen = ( navigation ) => 
  const [image, setImage] = useState(null);

  return (
    <View>
      <AppBrand />
      <DefaultProfileIcon
        onPress=() => 
          setImage(pickImage);
          console.log(image);
        
      />
      <AuthenticationForm
        btnName="SIGN UP"
        onNavigate=() => 
          console.log("image", image);
          console.log("Stays on Sign Up");
        
      />
      <CustomButtonLink
        custBtnLinkName="Cancel"
        style=styles.spacing_Cancel
        onNavigate=() => 
          navigation.navigate("Sign In");
        
      />
      image && (
        <Image source= uri: image  style= width: 200, height: 200  />
      )
    </View>
  );
;

const styles = StyleSheet.create(
  spacing_Cancel: 
    marginTop: 170,
    alignItems: "center",
  ,
);

export default SignUpScreen;

【问题讨论】:

【参考方案1】:

创建一个包含所有常用函数的文件(例如 Helper.js) 在帮助文件中添加函数并将其导出

export function getIcon()
  Console.log("Get icon function called")
    
  

现在导入你想在不同屏幕中使用的文件

例如: import Helper from '..path of the file'

并像使用它

Helper.getIcon()

【讨论】:

以上是关于React native - 创建一个可以在 2 个或更多屏幕之间共享的通用功能的主要内容,如果未能解决你的问题,请参考以下文章

【react-native】小结

React Native在原生和React Native间通信

react-native怎么创建两个class

如何使用 reanimated 2 [REACT-NATIVE] 创建捏合以缩放相机应用程序

我可以使用 React-native、firebase 和 node js 创建一个应用程序吗?

我可以将 wix/react-native-navigation 创建的根组件包装在 ApolloProvider 组件中吗