Реагировать на родную сборку - PullRequest
0 голосов
/ 19 апреля 2020

Я новичок в реакции на родную и пытаюсь использовать Пикер в своем приложении. Проблема в том, что когда я изменяю свое значение в 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

...