#arrays #react-native #react-native-android #fetch-api #picker
#массивы #react-native #выборка-api #средство выбора
Вопрос:
Я хочу вызвать и отобразить API в сборщике react native. Я не понимаю, как это сделать в функциональном компоненте, в разделе map, чтобы он получал значение
import React, {useState,useEffect} from 'react';
import {View, StyleSheet, Picker} from 'react-native';
const App = () => {
const [selectedValue, setSelectedValue] = useState([]);
useEffect(() => {
fetch('https://aboutreact.herokuapp.com/demosearchables.php')
.then(response => response.json())
.then(responseJson => {
console.log(responseJson.results)
setSelectedValue(responseJson.results)
})
.catch((error) => {
console.error(error);
});
}, []);
return (
<View style={{flex: 1,backgroundColor:'white'}}>
<Picker
selectedValue={selectedValue.id}
style={{ width: '100%' }}
onValueChange={(itemValue) => setSelectedValue({ id: itemValue })}>
{ ???.map((selectedValue, i) => {
return <Picker.Item key={i} value={selectedValue.id} label={selectedValue.name} />
})}
</Picker>
</View>
)
}
export default App
Комментарии:
1.
selectedValue
является ли массив или объект и? Я спрашиваю, потомуconst [selectedValue, setSelectedValue] = useState([]);
что утверждает, что это массив, тогда это:(itemValue) => setSelectedValue({ id: itemValue })
утверждает, что это объект с ключом идентификатора…2. спасибо за ваше внимание, и ваш вопрос, насколько мне известно, помогает..
Ответ №1:
- Используйте массив для хранения ваших начальных значений для
Picker
. - Затем установите для этого массива значение setState, когда API будет разрешен.
- Используйте другое состояние для сохранения выбранного значения.
import React, {useState,useEffect} from 'react';
import {View, StyleSheet, Picker} from 'react-native';
const App = () => {
const [values, setValues] = React.useState([]);
const [selectedValue, setSelectedValue] = useState(null);
useEffect(() => {
fetch('https://aboutreact.herokuapp.com/demosearchables.php')
.then(response => response.json())
.then(responseJson => {
setValues(responseJson.results)
})
.catch((error) => {
console.error(error);
});
}, []);
return (
<View style={{flex: 1,backgroundColor:'white'}}>
<Picker
selectedValue={selectedValue ? selectedValue.id : null}
style={{ width: '100%' }}
onValueChange={(itemValue) => setSelectedValue({ id: itemValue })}>
{ values.map((value, i) => {
return <Picker.Item key={i} value={value.id} label={value.name} />
})}
</Picker>
</View>
)
}