如何解决touchableOpacity 中的组件会自动重新渲染,甚至无需传递道具
我是本机反应的新手,过去 2 天我一直遇到问题。 我一直在研究一个应用程序。其中用户搜索药物并从其余 API 获取数据并显示结果。当用户点击任何搜索项时,它会导航到另一个包含其详细信息的页面。
但是现在,问题是数据获取成功并显示了初始结果,但是当我点击它的容器以移动到详细信息页面时,它给出了一个错误。
这是父组件的代码。当页面加载时,数据从 API 中获取,然后在第一次尝试中呈现。
index.js
import React,{ useEffect,useState } from 'react';
import { StyleSheet,View,StatusBar,TouchableOpacity,ScrollView,Text } from 'react-native';
import SearchBar from './searchBar.js'
import SearchResultContainer from './searchResultContainer.js'
export default function searchResult({ route,navigation}) {
const [searchResult,setReasult] = useState([]);
const searchItem = route.params.searchItem;
useEffect(() => {
async function fetchData(){
const response = await fetch('API link',{
method: 'POST',body: JSON.stringify({
target:searchItem
})
});
const data = await response.json();
setReasult(data);
}
fetchData()
},[])
var display;
if(searchResult.length<1){
display = <View>
<Text>Medicine not found</Text>
</View>
}
else{
display = searchResult.map((each,index)=>{
return (
<TouchableOpacity key={index}
onPress={() => {
console.log('hello world');
navigation.navigate('MedicineDescription',{
searchItem:each.medicine_name
})
}}
>
<SearchResultContainer data={each} />
</TouchableOpacity>
)
})
}
return (
<View>
<StatusBar barStyle="light-content" backgroundColor="#0277bd" />
<SearchBar />
<ScrollView>
{display}
</ScrollView>
</View>
)
}
这是 touchableOpacity 中 searchResultComntainer
的代码。
searchResultContainer.js
import React from 'react';
import { StyleSheet,Text,Image } from 'react-native';
export default function searchResultContainer(props) {
const medData = props;
console.log(medData);
return (
<View style={styles.container}>
<View style={styles.imageView}>
<Image style={styles.image} source={require("../../assets/Medicine.jpg")} />
</View>
<View style={styles.detail}>
<Text style={styles.name}>{medData.medicine_name} </Text>
<Text style={styles.chemical}>{medData.category_name}</Text>
<Text style={styles.brand}> {medData.Brand_name} </Text>
</View>
</View>
)
}
上面的组件重新渲染得很好,但是当我们触摸这个组件时,它应该导航到它的描述页面,但这样做可能会重新渲染组件,甚至没有传递道具,因为我收到了一个错误
undefined is not an object evaluating (medData.medicine_name).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。