Я новичок в реакции на родную и пытаюсь использовать Пикер в своем приложении. Проблема в том, что когда я изменяю свое значение в Picker onValueChange, он правильно устанавливает мое состояние, но в моем Picker selectedValue метка показывает «Нападение» (элемент моего массива crimeTypes), даже когда я меняю на, например, «Убийство»:
const [criminals, setCriminals] = useState([]);
const [crimeTypes, setCrimeTypes] = useState([]);
const [criminalFields, setCriminalFields] = useState([
{
crimeType: {},
criminal: {},
},
]);
function createCriminalFields() {
return criminalFields.map((item, index) => (
<>
<FieldTitle>
Type of crime {criminalFields[index].crimeType.tx_type}
</FieldTitle>
<PickerInput>
<Picker
selectedValue={criminalFields[index].crimeType.tx_type}
onValueChange={(value) =>
handleCriminalChange(value, index, 'crimeType')
}>
{crimeTypes.map((types) => {
return <Picker.Item label={types.tx_type} value={types} />;
})}
</Picker>
</PickerInput>
<FieldTitle>Criminal</FieldTitle>
<PickerInput>
<Picker
selectedValue={criminalFields[index].criminal.tx_name}
onValueChange={(value) =>
handleCriminalChange(value, index, 'criminal')
}>
{criminals.map((criminal) => {
return <Picker.Item label={criminal.tx_name} value={criminal} />;
})}
</Picker>
</PickerInput>
</>
));
}
function handleCriminalChange(itemValue, itemIndex, itemField) {
let fields = [...criminalFields];
fields[itemIndex] = {
...fields[itemIndex],
[itemField]: itemValue,
};
setCriminalFields(fields);
props.dataChanged(fields);
}
То, что делает код выше, в основном:
в событии onValueChange оно устанавливает мое состояние CriminalFields со значением, которое пользователь выбрал для Picker, то есть для объекта. И в selectedValue я получаю это значение, передавая индекс элемента и получая объект, который я хочу отобразить, но он застрял на «Assault».
Я печатаю это значение в тексте, и оно показывает правильно, только в моем selectedValue это неправильно.
Есть идеи?
PS: элемент .tx_type завершается, я получаю его из моего API