【发布时间】:2021-09-08 19:34:32
【问题描述】:
第一个屏幕显示从第二个屏幕保存项目的历史记录。
第二个屏幕是二维码扫描仪。扫描 QR CODE 后,它会显示一个 Modal,其中包含从 QR CODE 获得的信息。它还有一个按钮来保存信息。保存的信息在第一个屏幕中检索到 FlatList。
我遇到的问题是保存的信息没有显示在第一个屏幕中。
我只在 console.log [Error: [AsyncStorage] Passing null/undefined as value is not supported. If you want to remove value, Use .remove method instead. Passed value: undefined Passed key: @QR
编辑:我忘了写 AsyncStorage Key 是在文件顶部导出的,因此可以在第一个屏幕中导入。
代码:我保存信息的第二个屏幕。
const [Link, setLink] = useState([]);
const onSuccess = e => {
setModalVisible(true);
console.log(e);
const QRSave = setLink(e);
storeQRCode(QRSave);
};
const storeQRCode = QRSave => {
const stringifiedQR = JSON.stringify(QRSave);
AsyncStorage.setItem(asyncStorage, stringifiedQR).catch(err => {
console.log(err);
});
};
<Button
title="Save QR"
onPress={() => {
scanner.reactivate();
storeQRCode();
showToast();
}}
/>
代码:显示已保存信息历史记录的第一个屏幕。
const [Data, setData] = useState({});
useEffect(() => {
restoreQRCode();
}, []);
const restoreQRCode = () => {
AsyncStorage.getItem(asyncStorage)
.then(stringifiedQR => {
const parsedQR = JSON.parse(stringifiedQR);
console.log(stringifiedQR);
if (!parsedQR || typeof parsedQR !== 'object') return;
setData(parsedQR);
})
.catch(err => {
console.log(err);
});
};
<FlatList
data={Data}
keyExtractor={(_, index) => index.toString()}
renderItem={renderItem}
/>
【问题讨论】:
-
你使用 react-navigation v5 吗?
-
@NaldDev 是的,我正在使用 React Navigation V5。如果上面的这个选项是不可能的。我必须通过 React Navigation 传递保存的信息。有点想避免这种情况,因为当你只去那个特定的屏幕时,它只能通过 React Navigation 发送数据??????
标签: javascript reactjs react-redux react-native-android asyncstorage