reactjs - ReactNative useEffect Parent to Child 数据刷新
问题描述
useEffect 导致我在获取数据和能够使用最新数据重新加载弹出窗口时出现一些问题,但它没有被更新。
- ScreenA 获取数据并将数据加载到 SamplePopup - OK
- SamplePopup 能够获取并呈现此数据 - 好的
- 在 SamplePopup 上,您按下一个按钮以触发刷新到 ScreenA - OK
- ScreenA 获取新数据(OK),但现在 SamplePopup 没有获取此新数据 - 失败
关于如何从其父 ScreenA 获取 SamplePopup 最新数据的任何想法?
const ScreenA = ({navigation, route}) => {
const [showPopup, setShowPopup] = useState(false);
const [data, setData] = useState({
refreshing: false,
fruits: [],
vegetables: []
});
useEffect(() => {
retrieveData();
}, [data.refreshing]);
retrieveData = async () => {
let incomingFruits = [];
let incomingVegetables = [];
try {
const response = await fetch('api/fruits');
let json = await response.json();
incomingFruits = json.fruits;
} catch (error) {
}
try {
const response = await fetch('api/vegetables');
let json = await response.json();
incomingVegetables = json.vegetables;
} catch (error) {
}
setData({
refreshing: false,
fruits: incomingFruits,
vegetables: incomingVegetables
});
}
const refresh = () => {
retrieveData()
}
return (
<SafeAreaView style={{flex: 1}}>
{
showPopup ?
<SamplePopup
onPress={() => refresh()}
data={data}
showPopup={showPopup}
refreshing={data ? data.refreshing : false} />
: null
}
<TouchableWithoutFeedback onPress={() => setShowPopup(true)}>
<View >
<Text style={{paddingLeft: 5}}>Show Popup</Text>
</View>
</TouchableWithoutFeedback>
</SafeAreaView>
)
}
// SamplePopup
const SamplePopup = (props) => {
useEffect(() => {
console.log('data refresh')
console.log(props.data)
}, []);
onRefresh = () => {
props.onPress('REFRESH');
}
return (
<Modal
animationIn="slideInRight"
animationOut="slideOutRight"
isVisible={props.showPopup}>
<View style={{flex: 1}}>
<TouchableWithoutFeedback onPress={() => onRefresh()}>
<View >
<Text style={{paddingLeft: 5}}>Fetch new data</Text>
</View>
</TouchableWithoutFeedback>
</View>
</Modal>
)
}
解决方案
我在这里添加建议,因为它有点长并且包含代码
数据正在更新,它只是日期你正在尝试里面的日志
useEffect(() => {
console.log('data refresh')
console.log(props.data)
}, []);
此 useEffect 的回调将仅在第一次渲染后运行一次。尝试在 useEffect 之外打印值。您将获得更新的数据。
谢谢。让我知道它是否解决了您的问题。
推荐阅读
- c - C:为数组中的所有字符串添加文字,同时保留对原始字符串的访问权限
- javascript - 从映射对象中删除空数组
- xamarin - 如何修复xamarin中的空白列表视图页面
- encryption - 文件校验和中是否存在冲突?
- dart - 用颤振绘制虚线弧
- swift - 我有一个“UIImage”,我想将其转换为 NSData 以上传到 firebase 存储
- amazon-web-services - AWS Cloudfront CacheBehavior 的 PathPattern 中可接受的通配符
- c - 在从标准输入读取的while循环中捕获EOF字符
- python-3.x - 有没有办法让 Splash 等到站点上的所有 java 脚本加载?
- c++ - 修改内存区域 - 返回 0xCC VC++