React Native ImagePicker 导致钩子调用无效

React Native ImagePicker causes Invalid hook call

提问人:CSAlex 提问时间:9/21/2023 最后编辑:DinhNguyenCSAlex 更新时间:9/23/2023 访问量:39

问:

我正在尝试通过 ImagePicker 从图库中选择一张图片。 无论我尝试哪种 ImagePicker,“expo-image-picker”还是“react-native-image-crop-picker”,我总是遇到错误

Error: Invalid hook call. Hooks can only be called inside of the body of a function component.

我不会尝试在函数之外调用钩子。. 但是当我选择一张图片时,我返回一个正确的响应:

{"cropRect": {"height": 2242, "width": 1682, "x": 1155, "y": 0}, "height": 400, "mime": "image/jpeg", "modificationDate": "1695307585000", "path": "file:///storage/emulated/0/Android/data/com.clip/files/Pictures/4e0ae973-fd55-43ba-9758-34119952b375.jpg", "size": 103041, "width": 300}

代码如下所示:

import React from "react";
import {
  NativeModules,
  StyleSheet,
  View,
  Text,
  ImageBackground,
  Pressable,
} from "react-native";
import { Feather } from "@expo/vector-icons";
import ImagePicker from "react-native-image-crop-picker";

export default function ProfileScreen({ navigation, route }) {
  const [image, setImage] = React.useState(null);

  async function changeProfilePicture() {
    await ImagePicker.openPicker({
      width: 300,
      height: 400,
      cropping: true,
    }).then((image) => {
      console.log(image);
    });
  }

  return (
    <View style={styles.ViewStyle}>
      <Pressable
        style={styles.PressableProfilePictureStyle}
        onPress={() => changeProfilePicture()}
      >
        <Feather name="edit" size={30} color="black" />
      </Pressable>
    </View>
  );
}

javascript react-native expo imagepicker

评论


答:

1赞 Arti 9/22/2023 #1

在 onPress 函数中,缺少一对括号。

onPress={()=> { changeProfilePicture() } }>

我不知道它是否相关,但在 return 语句中有一个额外的视图 标记它不应该在那里。

评论

0赞 Junius L 9/22/2023
不,它看起来不错
0赞 Adam Ri 9/22/2023
您不需要括号。只有在onPress中执行了多个方法时才需要这些方法。因此,如果您只执行一种方法,则不需要括号。
0赞 CSAlex 9/22/2023 #2

这与图像选择器无关。这是关于打开选取器时 Socket 连接断开并连接了几次的事实。

评论

0赞 Arti 9/22/2023
如果您修复了它,请将您的答案标记为正确。
0赞 CSAlex 9/23/2023
仍然:“您可以在 5 小时内接受自己的答案”
0赞 CSAlex 9/23/2023
当你再次发布我的帖子时,你会得到正确的答案
0赞 DinhNguyen 9/23/2023 #3

如果选择器运行良好并返回正确的响应,我认为这绝对不是图像选择器的错。