Как реализовать элементы динамического меню (ящика) в React Native

#javascript #android #reactjs #react-native

Вопрос:

таков сценарий:

В Главном маршруте есть выпадающее меню, которое содержит подсистемы, и в зависимости от каждой подсистемы пункты меню различаются. Поэтому, когда я изменяю подсистему, пункты меню ящика должны обновляться. Я реализовал свой ящик, чтобы получать динамические элементы, такие как приведенный ниже код. Но проблема в том, что когда затем загружаются подсистемы, я иду за пунктами меню, после чего я обновляю состояние menuData, весь компонент перекомпилируется, и он попадает в цикл. Как Я Могу Преодолеть Эту Проблему ?

Домашний маршрут, из которого я выбираю подсистемы

Пункты меню В ящике, которые должны обновляться в каждой подсистеме

MY CODE StackNavigationManager.js

 import {AuthContext} from './context';  const StackNavigationManager = () => { const [menuData, setMenuData] = React.useState([]);  const authContext = React.useMemo(() => ({ validateMenuData: menuData => {  setMenuData(menuData);  },  }));  const DrawerScreen = ({route, navigation}) => (  <Drawer.Navigator  drawerContent={props => <CustomDrawerContent {...props} />}>  <Drawer.Screen  name="HomeDrawer"  component={Home} />  </Drawer.Navigator>  );  function CustomDrawerContent(props) {  return (  <SafeAreaView style={{flex: 1}}>  <DrawerItemList {...props} />  <FlatList  data={menuData}  keyExtractor={data => data.id.toString()}  renderItem={({item}) => {  return (  <DrawerItem  label={item.name}  onPress={() => alert(item.id)}></DrawerItem>  );  }}  />  </SafeAreaView>  );  }  return (<AuthContext.Provider value={authContext}>  <NavigationContainer>  <Stack.Navigator  initialRouteName={initialRoute}>    <Stack.Screen  name="Home"  component={DrawerScreen}  options={{  headerShown: false,  }}  />  </Stack.Navigator>  </NavigationContainer>  </AuthContext.Provider>);  

Context.js

 import React from 'react';  export const AuthContext = React.createContext();  

Home.js

 import {AuthContext} from './context';  const home = ({navigation}) => {  const {validateMenuData} = React.useContext(AuthContext);  React.useEffect(() => {  console.log('MOUNTED EFFECT');  getSubSystems();   return () => {  isMounted = false;  console.log('UNMOUNTED EFFECT');  };  }, []);  const getSubSystems = async () => {  const subSystemModel = {  isActive: true,  isVisible: true,  };  fetchSubSystemData(  subSystemModel,  response => {  if (response.list !== null) {  let listData = [...response.list];    fetchMenuAction(  listData[0].id,  response2 => {  validateMenuData([...response2.list]);  },  );  }  },  () => {},  );  };