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)}谢谢你的帮助