Реагировать | Выбирать количество

#reactjs #react-native #select

#reactjs #реагировать — родной #выберите

Вопрос:

У меня есть диалоговое окно, в котором пользователь может создать новый тур. Я хочу добавить опцию выбора, чтобы выбрать количество создаваемых туров. В настоящее время компонент не выполняет повторную передачу onChange, и сумма не сохраняется. Я был бы очень признателен за помощь 🙂

Мой код выглядит следующим образом :

   const [selectedOption, setSelectedOption] = useState({amount:''});

  const handleSelectChange = (event) => {
    const amount = event.target.amount;
    setSelectedOption({
      ...selectedOption,
      [amount]: event.target.value,
    });
  };
<FormControl className={classes.formControl}>
                  <InputLabel
                    htmlFor="text-simple"
                    required
                  >{t('Anzahl Touren')}</InputLabel>
                  <Select
                      native
                      value={selectedOption.amount}
                      onChange={handleSelectChange}
                      inputProps={{
                        amount: 'amount'
                      }}
                  >
                    <option value={1}>1</option>
                    <option value={2}>2</option>
                    <option value={3}>3</option>
                    <option value={4}>4</option>
                  </Select>
                </FormControl>
 

Редактировать:
Ошибка получения: у каждого дочернего элемента в списке должен быть уникальный ключ.

 const numberList = ['1','2','3','4','5']
                <FormControl className={classes.formControl}>
              <InputLabel
                htmlFor="text-simple"
                required
              >{t('Anzahl Touren')}</InputLabel>
              <Select
                  name="amount"
                  input={<Input id="text-simple"/>}
                  required
                  native
                  value={selectedOption.amount}
                  onChange={handleSelectChange}
              >
                {numberList.map((amount,index) => {
                  return(
                      <option
                      key={index}
                      value={amount}>
                        {amount}
                      </option>
                  )
                })}
              </Select>
            </FormControl>
 

Ответ №1:

Попробуйте этот подход,

Задайте name поле для select . И обновите состояние на основе поля name.

как показано ниже,

      <Select
          name="amount"  <--- Add this change
          native
          value={selectedOption.amount}
          onChange={handleSelectChange}
          inputProps={{
            amount: "amount"
          }}
        >
 

handleSelectChange метод:-

  const amount = event.target.name;
 

Полный код:-

 import { FormControl, InputLabel, Select } from "@material-ui/core";
import React, { useState } from "react";
import "./styles.css";

export default function App() {
  const [selectedOption, setSelectedOption] = useState({ amount: "" });

  const handleSelectChange = (event) => {
    console.log(event.target.name, event.target.value);
    const amount = event.target.name;
    setSelectedOption({
      ...selectedOption,
      [amount]: event.target.value
    });
  };

  return (
    <>
      <FormControl>
        <InputLabel htmlFor="text-simple" required>
          Anzahl Touren
        </InputLabel>
        <Select
          name="amount"
          native
          value={selectedOption.amount}
          onChange={handleSelectChange}
          inputProps={{
            amount: "amount"
          }}
        >
          <option value={1}>1</option>
          <option value={2}>2</option>
          <option value={3}>3</option>
          <option value={4}>4</option>
        </Select>
      </FormControl>
      Selected Amount - {selectedOption.amount}
    </>
  );
}
 

Рабочий код — https://codesandbox.io/s/proud-wave-4dz0u?file=/src/App.js:0-1080

Комментарии:

1. Это было быстро, и это работает идеально. Большое спасибо, Сарун!

2. Случайно, вы не знаете причину, по которой я получаю предупреждение: у каждого дочернего элемента в списке должна быть уникальная «ключевая» опора. когда я создаю новый тур.

3. Хорошо, я добавил к каждой опции ключевое поле, но это все равно приводит к ошибке.

4. Я добавил свои правки в код. Я все еще получаю сообщение об ошибке :/

5. Проверит эту проблему. Дай мне когда-нибудь