Reactjs React本机功能组件中呈现前的数据处理
我有一个反应本机功能组件 我正在使用useEffect从AsycStorage获取一些数据,并将其设置为本地状态。但是,在渲染之前,我想先对这些数据进行一些处理/计算,然后才能在屏幕上渲染。我应该在哪里进行计算 我的屏幕如下所示:Reactjs React本机功能组件中呈现前的数据处理,reactjs,react-native,Reactjs,React Native,我有一个反应本机功能组件 我正在使用useEffect从AsycStorage获取一些数据,并将其设置为本地状态。但是,在渲染之前,我想先对这些数据进行一些处理/计算,然后才能在屏幕上渲染。我应该在哪里进行计算 我的屏幕如下所示: const BasicScreen = ({ data, getPosts }) => { const [myItems, setItems] = useState([]); const checkForItems = () => {
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;
我不确定这种逻辑应该走向何方
请注意,此处理是必需的,因为除了存储之外,我还从redux存储中获取一些数据,然后将其与该数据一起处理。这样您就可以实现这一点
const [processedItemsA, setProcessedItemsA] = useState({});
const [processedItemsB, setProcessedItemsB] = useState({});
doProcessedItemsA = myItems => {
...
setProcessedItemsA({...data}); // set data after process Item A
}
doProcessedItemsB = myItems => {
...
setProcessedItemsB({...data}); // set data after process Item B
}
const checkForItems = () => {
var storageItems = AsyncStorage.getItem("MyItems").then((item) => {
if (item) {
const parsedItem = JSON.parse(item);
doProcessedItemsA(parsedItem);
doProcessedItemsB(parsedItem);
}
});
// setItems(storageItems); <-- No need to set here -->
};
const[processedItemsA,setProcessedItemsA]=useState({});
const[processedItemsB,setProcessedItemsB]=useState({});
doProcessedItemsA=myItems=>{
...
setProcessedItemsA({…data});//在进程项A之后设置数据
}
doProcessedItemsB=myItems=>{
...
setProcessedItemsB({…data});//在进程项B之后设置数据
}
常量checkForItems=()=>{
var storageItems=AsyncStorage.getItem(“MyItems”)。然后((item)=>{
如果(项目){
const parsedItem=JSON.parse(项);
doProcessedItemsA(parsedItem);
doProcessedItemsB(parsedItem);
}
});
//设置项(存储项);
};
您可以做的是创建另一个setState()
从myItems
读取数据,然后使用这些函数进行处理,然后使用较新的setState()
进行设置。但是我不能在功能组件中使用setState,或者可以吗?您是在函数checkForItems()中进行设置的
useMemo
是一个不错的选择。它与呈现一起运行,而useffect
在呈现之后运行。如果从异步存储而不是回调获取数据,则使用异步等待。var storageItems=await AsyncStorage.getItem(“MyItems”);然后,您将拥有storageItems中的所有数据,并在同一个函数中相应地对其进行处理。那么,可以从useffect调用checkForItems函数吗?是的,就是从那里调用吗?我可以按照上面某个人的建议用async wait重新构造这个函数吗?我尝试过这样做,但出现了一些问题,数据仍然未设置。是的,请尝试使用async
const [processedItemsA, setProcessedItemsA] = useState({});
const [processedItemsB, setProcessedItemsB] = useState({});
doProcessedItemsA = myItems => {
...
setProcessedItemsA({...data}); // set data after process Item A
}
doProcessedItemsB = myItems => {
...
setProcessedItemsB({...data}); // set data after process Item B
}
const checkForItems = () => {
var storageItems = AsyncStorage.getItem("MyItems").then((item) => {
if (item) {
const parsedItem = JSON.parse(item);
doProcessedItemsA(parsedItem);
doProcessedItemsB(parsedItem);
}
});
// setItems(storageItems); <-- No need to set here -->
};