react-native - 如何将数据传递到详细信息屏幕?我正在尝试,但它给了我这个错误:无效尝试解构不可迭代实例
问题描述
主屏幕:
import React from 'react';
import {View,Text, Image,StyleSheet,TouchableOpacity} from 'react-native';
import {useNavigation} from '@react-navigation/native';
export default function Books({item}){
const firstUrl= 'https://carp-kenya.herokuapp.com';
var secondUrl= String(item.imageFile) ;
var urls= String (firstUrl+secondUrl);
const navigation = useNavigation();
const{Title,description,File}=item;
return (
<View style={styles.container1}>
<TouchableOpacity onPress={()=>navigation.navigate('DetailsScreen',{file:File,Description: description,Title:Title})} >
<Image style={styles.image} source={{uri: urls}}/>
<View style={styles.view2}>
<Text style={styles.title}> {Title}</Text>
</View>
</TouchableOpacity>
</View>
)
}
源屏幕:-
import React,{useEffect,useState,useCallback} from 'react';
import {View, TouchableOpacity, Text, StyleSheet, SafeAreaView, FlatList, ActivityIndicator, Alert, ScrollView} from 'react-native';
import Books from '../resources/bookSource';
import {useNavigation} from '@react-navigation/native'
export default function RegistrationScreen({item}){
const [isLoading, setLoading] = useState(false);
const [user, setUser] = useState([]);
const [cat, setCat] = useState([]);
const [text,setText]=useState("");
const [ref, setRef]= useState([])
const [refreshing, setRefreshing] = useState(false);
const navigation = useNavigation();
const ActionNav =()=>{searchData('action')}
const DramaNav =()=>{searchData('drama')}
const InspirationalNav =()=>{searchData('inspirational')}
const EducationalNav =()=>{searchData('educational')}
useEffect(()=>{
fetchData()
},[])
const fetchData = () => {
setLoading(true);
fetch('https://carp-kenya.herokuapp.com/book_json_format/')
.then((response) => response.json())
.then((json) =>{setUser(json),
(setCat(json)),
(setRef(json)) })
.catch(() => Alert.alert('Something went wrong..', 'There was an error.'))
.finally(() => {
setLoading(false)
});
}
const searchData = (text) => {
const newData = cat.filter((item) => {
const itemData = item.category.toUpperCase();
const textData = text.toUpperCase();
return itemData.indexOf(textData) > -1;
});
setUser(newData);
setText(text);
}
const onRefresh = useCallback(() => {
setRefreshing(true);
fetch('https://carp-kenya.herokuapp.com/book_json_format/')
.then((response) => response.json())
.then((json) =>setUser(json))
.catch(() => Alert.alert('Something went wrong..', 'There was an error.'))
.finally(() => {
setRefreshing(false)
});
}, []);
return(
<SafeAreaView >
<ScrollView horizontal={true} showsHorizontalScrollIndicator={false}>
<View style={styles.container}>
<TouchableOpacity style={styles.category} onPress={InspirationalNav}>
<Text style={styles.text}>Inspirational</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.category} onPress={EducationalNav}>
<Text style={styles.text}>Educative</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.category} onPress={DramaNav} >
<Text style={styles.text}>Drama</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.category} onPress={ActionNav}>
<Text style={styles.text}>Action</Text>
</TouchableOpacity>
</View>
</ScrollView>
{isLoading ? <ActivityIndicator style={styles.containers}/> :
<FlatList
data={user}
showsHorizontalScrollIndicator={false}
keyExtractor={({ id }, index) => id}
renderItem={( {item }) => (<Books item={item} />)
}
numColumns={3}
onRefresh={()=>onRefresh()}
refreshing={refreshing}
/>
}
</SafeAreaView>
);
解决方案
解构不可迭代实例的无效尝试
表示您尝试迭代的实例不可迭代。你应该做的是检查 opt 对象是否是可迭代的并且可以在 JSX 代码中访问。
检查您如何将 params 道具传递给 Books 请检查并记录它
推荐阅读
- javascript - 制作新的 todolist 时更改 li 标签颜色
- python - TypeError 'Item' 主题不可迭代
- google-bigquery - 创建嵌套结构表
- python - 基于前一行和当前行的多个 IF 条件 - Pandas
- bash - 根据路径,相同的“查找”命令不起作用
- bash - 从可执行文件中读取并写回响应
- javascript - 检查参数是否包含某个字符串的最佳方法是什么?
- printing - Lua:在没有tostring的情况下获取Lua中的表地址
- testing - 如果条件没有范围,如何使用等价分区(EP)编写测试用例?
- c# - Mono.Linker.MarkException:错误处理方法:'System.Void Plugin.LocalNotification.Platform.Droid.NotificationServiceImpl