React native 使用在两个屏幕之间导航。然后

React native 使用在两个屏幕之间导航。然后,react-native,navigation,imagepicker,React Native,Navigation,Imagepicker,我正在开发一个移动应用程序,它可以拍摄一张照片,然后在另一个屏幕上进行渲染,我可以这样做,但问题是,当我调用图像选择器拍摄图像,然后将其传递到另一个屏幕时,我会看到第一个屏幕,在它导航到第二个屏幕之前,我的按钮会显示大约一秒钟,我如何防止出现这种情况,下面是代码: useffect(()=>{if(image)navigating()},[image]); const takePicture=()=>{ ImagePicker.openCamera({ mediaType:“照片”, 宽度:3

我正在开发一个移动应用程序,它可以拍摄一张照片,然后在另一个屏幕上进行渲染,我可以这样做,但问题是,当我调用图像选择器拍摄图像,然后将其传递到另一个屏幕时,我会看到第一个屏幕,在它导航到第二个屏幕之前,我的按钮会显示大约一秒钟,我如何防止出现这种情况,下面是代码:

useffect(()=>{if(image)navigating()},[image]);
const takePicture=()=>{
ImagePicker.openCamera({
mediaType:“照片”,
宽度:300,
身高:400,
这是真的,
裁剪:没错,
})。然后(图像=>{
setImage(image.path);
});

}
您可以在图像上使用useEffect挂钩,以便在设置图像时,可以调用导航功能

useffect(()=>{ 如果(图像) 导航()
},[图片]

代码的问题是不能在组件jsx中使用导航
您需要使用UseFact,而不是

我认为没有办法在选择图像后直接导航到第二个屏幕。您可以做的是添加一个加载器,以在用户拾取图像时隐藏第一个屏幕。像这样的

const [loading, setLoading] = useState(false);

const takePicture=()=>{
    setLoading(true);
    ImagePicker.openCamera({
        mediaType:'photo',
        width: 300,
        height: 400,
        includeBase64:true,
        cropping: true,
      }).then(image => {
        navigation.navigate('Result', { key: image });
        setLoading(false);
      });
}

if (loading) return <ActivityIndicator />;

return (....)
const[loading,setLoading]=useState(false);
const takePicture=()=>{
设置加载(真);
ImagePicker.openCamera({
mediaType:“照片”,
宽度:300,
身高:400,
这是真的,
裁剪:没错,
})。然后(图像=>{
navigation.navigate('Result',{key:image});
设置加载(假);
});
}
如果(装载)返回;
返回(…)

我尝试了这个方法,但它仍然给了我相同的结果,它没有直接进入第二个屏幕,它仍然返回到第一个屏幕,然后快速返回到第二个屏幕。我尝试使用useffect作为第一条注释,但我仍然得到相同的结果。您可以共享代码吗?当状态更新时,您需要设置state in.then(),useEffact将被自动调用。我正在这样做
const[image,setImage]=useState(null)useEffect(()=>{if(image)navigating()},[image]);const takePicture=()=>{ImagePicker.openCamera({mediaType:'photo',宽度:300,高度:400,includeBase64:true,裁剪:true,})。然后(image=>{setImage(image.path);});}
不使用.then(),而是使用onChange处理程序,onChange={()=>setImage(image.path)}谢谢你的帮助