【发布时间】:2020-11-03 03:41:57
【问题描述】:
我有一个 React Native 功能组件。
我正在使用 useEffect 从 AsycStorage 获取一些数据并将其设置为本地状态。但是,在渲染之前,我想先对这些数据进行一些处理/计算,然后才能在屏幕上渲染它。我应该在哪里做这个计算?
我的屏幕如下所示:
const BasicScreen = ({ data, getPosts }) => {
const [myItems, setItems] = useState([]);
const checkForItems = () => {
var storageItems = AsyncStorage.getItem("MyItems").then((item) => {
if (item) {
return JSON.parse(item);
}
});
setItems(storageItems);
};
useEffect(() => {
async function getItems() {
await checkForItems(); // calling function to get data from storage
}
getItems(); // Local Storage
getPosts(); // Store action
}, []);
return (
<View>
<>
<Text>{JSON.stringify(processedItemsA)}</Text>
<Text>{JSON.stringify(processedItemsB)}</Text>
</>
</View>
);
}
export default BasicScreen;
如您所见,我检查 AsyncStorage 中的项目并将该数据设置为本地状态 myItems。
我想做一些数学计算和一些条件逻辑,例如,将 myItems 的数据分成两个单独的类别,然后在屏幕上呈现。类似于processedItemsA 和processedItemsB。我应该在哪里处理数据?
processedItemsA = myItems => {
// Some logic
}
processedItemsB = myItems => {
// Some logic
}
我不确定这个逻辑应该去哪里。
请注意,这个处理是必需的,因为除了存储之外,我还从 redux 存储中获取一些数据,然后将其与这些数据一起处理。
【问题讨论】:
-
您可以做的是创建另一个
setState(),在其中从myItems中读取数据,然后使用这些函数处理它,然后使用较新的setState()进行设置。跨度> -
但是我不能在功能组件中使用setState,还是可以吗?
-
你是在函数
checkForItems()中做的。 -
useMemo在这里是个不错的选择。它与渲染一起运行,而useEffect在渲染之后运行。 -
在从 AsyncStorage 而非回调中获取数据时使用 async await。 var storageItems = await AsyncStorage.getItem("MyItems");然后,您将拥有 storageItems 中的所有数据,并在同一函数中相应地对其进行处理。
标签: reactjs react-native