You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决React Native中useState报错:setSelectedImage不是函数

问题解决:useState报错setSelectedImage不是函数

错误根源

你在App.js中错误使用对象解构获取useState的返回值:

const { selectedImage, setSelectedImage } = useState(null);

useState返回的是有序数组,而非对象。对象解构会导致setSelectedImage未被正确赋值为状态更新函数,调用时自然触发“不是函数”的错误。

修复方案

将useState的解构语法改为数组解构:

const [selectedImage, setSelectedImage] = useState(null);

修复后的完整App.js代码

import { StatusBar } from 'expo-status-bar';
import { useState } from 'react';
import { StyleSheet, View } from 'react-native';

import Button from './components/Button';
import ImageViewer from './components/ImageViewer';
import * as ImagePicker from 'expo-image-picker';

const PlaceholderImage = require('./assets/images/background-image.png');

export default function App() {
  // 改为数组解构,正确获取状态和更新函数
  const [selectedImage, setSelectedImage] = useState(null);

  const pickImageAsync = async () => {
    let result = await ImagePicker.launchImageLibraryAsync({
      allowsEditing: true,
      quality: 1,
    });

    if (!result.canceled) {
      setSelectedImage(result.assets[0].uri);

    } else {
      alert('You did not select any image.');
    }
  };
  return (
    <View style={styles.container}>
      <View style={styles.imageContainer}>
        <ImageViewer
          placeholderImageSource={PlaceholderImage}
          selectedImage={selectedImage}
        />
      </View>
      <View style={styles.footerContainer}>
        <Button theme="primary" label="Choose a photo" onPress={pickImageAsync} />
        <Button label="Use this photo" />
      </View>
      <StatusBar style="auto" />
    </View>
  );
}


const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#25292e',
    alignItems: 'center',
  },
  imageContainer: {
    flex: 1,
    paddingTop: 58,
  },
  footerContainer: {
    flex: 1 / 3,
    alignItems: 'center',
  },
});

补充说明

React内置Hook(如useState、useEffect)的返回值都是有序数组,数组元素顺序固定:第一个是状态值,第二个是状态更新函数。必须通过数组解构按顺序获取,不能用对象解构——因为数组元素没有对应的键名,对象解构无法匹配到正确的值。

内容的提问来源于stack exchange,提问作者user23555515

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:51:16