反应本机下拉选择器没有响应
React native dropdown picker not responding
我使用 React 本机下拉选择器来显示项目列表,但选择器似乎没有响应任何点击
下面是我写的完整代码:
import React, {useEffect, useState} from 'react';
import {
View,
ScrollView,
ActivityIndicator,
Text,
TouchableOpacity,
} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import DropDownPicker from 'react-native-dropdown-picker';
import HomeTabAssessmentCardComponent from './components/HomeTabAssessmentCardComponent';
import {API} from '../../api';
import HomeTabOverAllDevelopmentCardComponent from './components/HomeTabOverAllDevelopmentCardComponent';
import HomeTabPhysicalGrowthCardComponent from './components/HomeTabPhysicalGrowthCardComponent';
import HomeTabExpertCardComponent from './components/HomeTabExpertCardComponent';
import HomeTabPremiumCardComponent from './components/HomeTabPremiumCardComponent';
import HomeTabPrimeCardComponent from './components/HomeTabPrimeCardComponent';
import HomeTabWeekWiseImagesCardComponent from './components/HomeTabWeekWiseImagesCardComponent';
export default function HomeTabScreen(props) {
console.log(
' ~ file: HomeTabScreen.js ~ line 12 ~ HomeTabScreen ~ props',
props,
);
const {navigation} = props;
const mHomeTabResponse = null;
const [mainResponse, setMainResponse] = useState([]);
const [mAssessmentList, setAssessmentList] = useState([]);
const [mWeekWiseMediaList, setWeekWiseMedialist] = useState([]);
const [title, setTitle] = useState('');
const [text, setText] = useState('');
const [loading, setLoading] = useState(true);
const [userObject, setUserObject] = useState(null);
const [childId, setChild] = useState(null);
useEffect(() => {
if (userObject) {
getHomeTabMainAPI();
} else {
getData();
}
}, [userObject]);
const getData = () => {
try {
const jsonValue = AsyncStorage.getItem('user_object').then(
(result) =>
// console.log('result', JSON.parse(result)),
setUserObject(JSON.parse(result).children),
// console.log('userssss', userObject),
);
} catch (e) {
console.log(e);
}
};
const getHomeTabMainAPI = async () => {
try {
const response = await API.get(
`some url`,
);
console.log('res', response);
setAssessmentList(response.data.content.assessments.data);
setWeekWiseMedialist(response.data.content.media_cards.data);
setTitle(response.data.content.assessments.title);
setText(response.data.content.assessments.text);
setMainResponse(response.data.content.assessments.data);
setLoading(false);
} catch (e) {
setLoading(false);
}
};
const logoutHandler = () => {
try {
AsyncStorage.removeItem('user_object').then(navigation.navigate('login'));
} catch (e) {
console.log(e);
}
console.log('Done.');
};
if (loading) {
return (
<View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}>
<ActivityIndicator size="large" color="#FE017E" />
</View>
);
}
return (
<ScrollView showsVerticalScrollIndicator={false}>
{console.log('object', userObject)}
{userObject &&
userObject != '' &&
userObject != null &&
userObject != undefined &&
userObject.length > 1 && (
<DropDownPicker
items={userObject.map((item) => {
return {
label: item.name,
value: item.id,
};
})}
containerStyle={{height: 40}}
/>
)}
<TouchableOpacity
style={{
marginLeft: '80%',
}}
onPress={() => logoutHandler()}>
<Text style={{fontSize: 15, fontWeight: 'bold', color: '#000'}}>
Log out
</Text>
</TouchableOpacity>
<View style={{paddingBottom: 58}}>
{/* {console.log('view mWeekWiseMediaList - ' + mWeekWiseMediaList)} */}
{mWeekWiseMediaList !== null && mWeekWiseMediaList.length > 0 ? (
<HomeTabWeekWiseImagesCardComponent data={mWeekWiseMediaList} />
) : (
<Text></Text>
)}
<HomeTabOverAllDevelopmentCardComponent />
<HomeTabPremiumCardComponent />
{/* {mAssessmentList &&
mAssessmentList != '' &&
mAssessmentList != null &&
mAssessmentList.length > 1 &&
userObject != null &&
userObject != '' &&
userObject != undefined &&
userObject[0] &&
userObject[0] != null &&
userObject[0] != undefined &&
userObject[0] != '' && (
<HomeTabAssessmentCardComponent
data={mAssessmentList}
title={title}
text={text}
navigation={props}
children={userObject.children[0].id}
childrenObject={userObject.children[0]}
/>
)} */}
<HomeTabPrimeCardComponent />
<HomeTabPhysicalGrowthCardComponent />
<HomeTabExpertCardComponent />
</View>
</ScrollView>
);
}
如果有人可以让 mw 知道哪里出了问题或者为什么我的下拉菜单没有响应,那将是一个很大的帮助。
任何线索将不胜感激。
我发现了问题。它的 运行 在无限循环中,因为 userObject 在依赖数组中。请将其从 useEffect 依赖数组中移除,保持为空。
另外,如果 getHomeTabMainAPI() 和 getData() 相互独立。你不需要 if else 块。让我知道这是否有效。
useEffect(() => {
getData();
getHomeTabMainAPI();
}, []);
您在 return
中缺少一个括号
return ({
label: item.name,
value: item.id,
});
尝试粘贴此代码
我使用 React 本机下拉选择器来显示项目列表,但选择器似乎没有响应任何点击
下面是我写的完整代码:
import React, {useEffect, useState} from 'react';
import {
View,
ScrollView,
ActivityIndicator,
Text,
TouchableOpacity,
} from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import DropDownPicker from 'react-native-dropdown-picker';
import HomeTabAssessmentCardComponent from './components/HomeTabAssessmentCardComponent';
import {API} from '../../api';
import HomeTabOverAllDevelopmentCardComponent from './components/HomeTabOverAllDevelopmentCardComponent';
import HomeTabPhysicalGrowthCardComponent from './components/HomeTabPhysicalGrowthCardComponent';
import HomeTabExpertCardComponent from './components/HomeTabExpertCardComponent';
import HomeTabPremiumCardComponent from './components/HomeTabPremiumCardComponent';
import HomeTabPrimeCardComponent from './components/HomeTabPrimeCardComponent';
import HomeTabWeekWiseImagesCardComponent from './components/HomeTabWeekWiseImagesCardComponent';
export default function HomeTabScreen(props) {
console.log(
' ~ file: HomeTabScreen.js ~ line 12 ~ HomeTabScreen ~ props',
props,
);
const {navigation} = props;
const mHomeTabResponse = null;
const [mainResponse, setMainResponse] = useState([]);
const [mAssessmentList, setAssessmentList] = useState([]);
const [mWeekWiseMediaList, setWeekWiseMedialist] = useState([]);
const [title, setTitle] = useState('');
const [text, setText] = useState('');
const [loading, setLoading] = useState(true);
const [userObject, setUserObject] = useState(null);
const [childId, setChild] = useState(null);
useEffect(() => {
if (userObject) {
getHomeTabMainAPI();
} else {
getData();
}
}, [userObject]);
const getData = () => {
try {
const jsonValue = AsyncStorage.getItem('user_object').then(
(result) =>
// console.log('result', JSON.parse(result)),
setUserObject(JSON.parse(result).children),
// console.log('userssss', userObject),
);
} catch (e) {
console.log(e);
}
};
const getHomeTabMainAPI = async () => {
try {
const response = await API.get(
`some url`,
);
console.log('res', response);
setAssessmentList(response.data.content.assessments.data);
setWeekWiseMedialist(response.data.content.media_cards.data);
setTitle(response.data.content.assessments.title);
setText(response.data.content.assessments.text);
setMainResponse(response.data.content.assessments.data);
setLoading(false);
} catch (e) {
setLoading(false);
}
};
const logoutHandler = () => {
try {
AsyncStorage.removeItem('user_object').then(navigation.navigate('login'));
} catch (e) {
console.log(e);
}
console.log('Done.');
};
if (loading) {
return (
<View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}>
<ActivityIndicator size="large" color="#FE017E" />
</View>
);
}
return (
<ScrollView showsVerticalScrollIndicator={false}>
{console.log('object', userObject)}
{userObject &&
userObject != '' &&
userObject != null &&
userObject != undefined &&
userObject.length > 1 && (
<DropDownPicker
items={userObject.map((item) => {
return {
label: item.name,
value: item.id,
};
})}
containerStyle={{height: 40}}
/>
)}
<TouchableOpacity
style={{
marginLeft: '80%',
}}
onPress={() => logoutHandler()}>
<Text style={{fontSize: 15, fontWeight: 'bold', color: '#000'}}>
Log out
</Text>
</TouchableOpacity>
<View style={{paddingBottom: 58}}>
{/* {console.log('view mWeekWiseMediaList - ' + mWeekWiseMediaList)} */}
{mWeekWiseMediaList !== null && mWeekWiseMediaList.length > 0 ? (
<HomeTabWeekWiseImagesCardComponent data={mWeekWiseMediaList} />
) : (
<Text></Text>
)}
<HomeTabOverAllDevelopmentCardComponent />
<HomeTabPremiumCardComponent />
{/* {mAssessmentList &&
mAssessmentList != '' &&
mAssessmentList != null &&
mAssessmentList.length > 1 &&
userObject != null &&
userObject != '' &&
userObject != undefined &&
userObject[0] &&
userObject[0] != null &&
userObject[0] != undefined &&
userObject[0] != '' && (
<HomeTabAssessmentCardComponent
data={mAssessmentList}
title={title}
text={text}
navigation={props}
children={userObject.children[0].id}
childrenObject={userObject.children[0]}
/>
)} */}
<HomeTabPrimeCardComponent />
<HomeTabPhysicalGrowthCardComponent />
<HomeTabExpertCardComponent />
</View>
</ScrollView>
);
}
如果有人可以让 mw 知道哪里出了问题或者为什么我的下拉菜单没有响应,那将是一个很大的帮助。 任何线索将不胜感激。
我发现了问题。它的 运行 在无限循环中,因为 userObject 在依赖数组中。请将其从 useEffect 依赖数组中移除,保持为空。
另外,如果 getHomeTabMainAPI() 和 getData() 相互独立。你不需要 if else 块。让我知道这是否有效。
useEffect(() => {
getData();
getHomeTabMainAPI();
}, []);
您在 return
中缺少一个括号 return ({
label: item.name,
value: item.id,
});
尝试粘贴此代码