如何将更新的状态变量发送到React Native中的另一个组件

utugiqy6  于 12个月前  发布在  React
关注(0)|答案(1)|浏览(118)

示例代码:

export default function Cart() {
  const navigation = useNavigation();
    // Stores the selected image URI 
    const [file, setFile] = useState(''); 

    // Stores any error message 
    const [error, setError] = useState(null); 

    // Function to pick an image from 
    //the device's media library 
    const pickImageAsync = async () => {
    let result = await ImagePicker.launchImageLibraryAsync({
      allowsEditing: true,
      quality: 1,
    }); 

    if (!result.canceled) {
      console.log(result);
   
      setFile(result.assets[0].uri);
    } else {
      alert('You did not select any image.');
    }
  };
 

  return (
    
    <View style={styles.container}>
    <TouchableOpacity onPress={() =>pickImageAsync() } style={styles.btnContainer} ><View><Text style={styles.textview}>Upload Image</Text>
    </View>
    </TouchableOpacity>

            {/* Conditionally render the image 
            or error message */}  
            {file ? navigation.navigate('AddToCart',{'file':file}): ( 
                // Display an error message if there's 
                // an error or no image selected 
                <Text style={styles.errorText}>{error}</Text> 
            )}  
    </View>   
    
  );
}

字符串
我使用ImagePicker库发送图像到另一个屏幕与屏幕导航器.它存储在一个状态变量.然而,它给我一个错误,它不能更新一个组件,而渲染另一个组件.我必须传递相同的imagefile多个组件从一个到另一个.我只有一个上传按钮,并在选择,需要发送图像到另一个组件,我是通过route.params获取的。
我意识到它不能同时更新图像和发送,我该如何解决这个问题

7vhp5slm

7vhp5slm1#

这是一个糟糕的方法,会建议你做一些行动导航,在你的情况下,可以当你刚刚从选择器,如果没有文件更新错误文本文件

const navigation = useNavigation();
  // Stores the selected image URI 
  const [file, setFile] = useState('');

  // Stores any error message 
  const [error, setError] = useState(null);

  // Function to pick an image from 
  //the device's media library 
  const pickImageAsync = async () => {
    let result = await ImagePicker.launchImageLibraryAsync({
      allowsEditing: true,
      quality: 1,
    });

    //todo set error if don't have file
    if (!result.canceled) {
      console.log(result);
      setFile(result.assets[0].uri); 
      navigation.navigate('AddToCart',{'file': result.assets[0].uri})

    } else {
      alert('You did not select any image.');
    }
  };

  return (
    
    <View style={styles.container}>
    <TouchableOpacity onPress={() =>pickImageAsync() } style={styles.btnContainer} >
      
      <View><Text style={styles.textview}>Upload Image</Text>
    </View>
    </TouchableOpacity>

            {!file  ? <Text style={styles.errorText}>{error}</Text> : null}

    </View>   
    
  );

}

字符串
一切就绪!

相关问题