Мой указатель даты не изменит свое значение в реактивных перехватах

#javascript #reactjs #react-redux #react-router #react-hooks

#javascript #reactjs #реагировать-redux #реагировать-маршрутизатор #реагирующие перехваты

Вопрос:

Я использую react hooks для изменения значения datepicker, но оно не изменится, оно нормально работает в компоненте класса, но я хочу изменить его на компонент hooks

Приведенный ниже код не работает

 function Example() {
  const [value, setValue] = useState({
    startDate: new Date(),
    endDate: new Date(),
    key: 'selection',
  });

  const handleChange = (e) => {
    setValue((prevState) => ({
      ...prevState,
      [e.target.name]: e.target.value,
    }));
  };

  return (
         <InputDate
            name="value"
            max={30}
            value={value}
            onChange={handleChange}
          />
  );
}
  

Приведенный ниже код — это работа (компонент класса)

 class Example extends Component {
  state = {
    value: {
      startDate: new Date(),
      endDate: new Date(),
      key: 'selection',
    }
  }

  handleChange = e => {
    this.setState({
      [e.target.name]: e.target.value
    })
  }

  render() {
    return (
            <InputDate
              name="value"
              max={30}
              value={this.state.value}
              onChange={this.handleChange}
            />
    );
  }
}
  

Ответ №1:

Это связано с объединением событий. Вам нужно извлечь значения из события в самом обработчике.

UPD.Я предполагаю, что остальная часть кода, если она верна: имена, InputDate обрабатывает форму значения, которое вы ему вводите, и т.д.

 function Example() {
  const [value, setValue] = useState({
    startDate: new Date(),
    endDate: new Date(),
    key: 'selection',
  });

  const handleChange = (e) => {
    const {name, value} = e.target;

    setValue((prevState) => ({
      ...prevState,
      [name]: value,
    }));
  };

  return (
         <InputDate
            name="value"
            max={30}
            value={value}
            onChange={handleChange}
          />
  );
}
  

Ответ №2:

  function Example() {
  const [value, setValue] = useState({
    startDate: new Date(),
    endDate: new Date(),
    key: 'selection',
  });

  const handleChange = (e) => {
    setValue((prevState) => ({
      ...prevState,
      [e.target.name]: new Date(e.target.value),
    }));
  };

  return (
         <InputDate
            name="value"
            max={30}
            value={value}
            onChange={handleChange}
          />
  );
}
  

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

1. Пожалуйста, предоставьте объяснение вашему коду — очень сложно что-то понять, когда это не объяснено.