В вашей функции handleSelect
вы переопределяете currencies
, сохраненный в состоянии, со списком, содержащим только выбранную валюту. Вам следует прекратить это делать.
Почему бы не установить значение selectedCurrency
в состояние и не использовать его для заполнения средства выбора текущим значением, а обновить его при вызове handleSelect
?
Обновлено для добавления дополнительной справки
Когда вы инициализируете свое состояние, вы устанавливаете валюты следующим образом:
state = {
currencies: ['USD', 'AUD', 'SGD', 'PHP', 'EUR'],
Когда вызывается ваша функция handleSelect
, она меняет это список в состоянии:
handleSelect = (itemValue, itemIndex) => {
this.setState(
{
...this.state,
currencies: [itemValue], // <-- HERE! You're changing the list of currencies
result: null,
},
this.calculate,
);
};
После того, как это будет вызвано, ваш список валют будет именно тем, который вы выбрали в своем средстве выбора.
Именно поэтому, когда ваш компонент повторно отображает все остальные options vani sh:
Вы получаете валюты из состояния, и теперь это просто массив, содержащий ту, которую вы выбрали:
const {currencies, base, amount, convertTo, result} = this.state;
Итак, в вашем средстве выбора при вызове currencies.map
для создания Picker.Item
компонентов у вас есть только одна валюта.
Следующая большая проблема заключается в том, что вы вызываете одну и ту же функцию handleSelect
из каждого средства выбора ... поэтому вы не можете фактически выбрать две разные валюты.
Исправления: * 103 5 *
Во-первых, нам нужны две функции управления для ваших двух сборщиков:
handleSelectBase = base => this.setState({ base }, this.calculate)
handleSelectConvertTo = convertTo => this.setState({ convertTo }, this.calculate)
Затем обновите ваши два сборщика, чтобы использовать правильную функцию обработчика, и вы должны быть в лучшем положении.