如何将material-ui-pickers的日期选择器与ReactJS的State Hook一起使用并将日期传递给父组件?

Tom*_*Tom 4 reactjs material-ui react-hooks

我正在尝试使用 Material-ui-pickers 的日期选择器,其中示例演示是使用State Hooks编写的。我想获取日期值作为父组件的回调。这是子组件:

import React, { Component } from 'react';
import { Fragment, useState } from "react";
import { DatePicker, InlineDatePicker } from "material-ui-pickers";

function YearMonthPicker(props) {
const [selectedDate, handleDateChange] = useState("2013-01-01");

  return (
        <div className="picker">
          <DatePicker
            openTo="year"
            views={["year", "month"]}
            label="Year and Month"
            helperText="With min and max"
            minDate={new Date("2011-01-01")}
            maxDate={new Date("2018-12-01")}
            value={selectedDate}
            onChange={handleDateChange}
          />
        </div>
  );
}

export default YearMonthPicker;
Run Code Online (Sandbox Code Playgroud)

在“onChange”上,该函数修改其“selectedDate”状态。

在我的父组件中,我定义了该函数:

handleChangeTo = e => {
    this.setState({ dateTo: e.target.value });
};
Run Code Online (Sandbox Code Playgroud)

并且,在渲染方法中,我尝试这样调用它:

<YearMonthPicker handleChangeTo={this.handleChangeTo} />
Run Code Online (Sandbox Code Playgroud)

据我了解,如果我将“onChange”的功能更改为 props.handleChangeTo,那么子组件的状态将不会在更改时更新。将日期传递给父组件的正确方法是什么?

Tho*_*lle 5

您可以创建一个从 props调用和 的新函数,而不是handleDataChange直接用作处理程序。然后将直接获取值,而不是事件。onChangehandleDataChangehandleChangeTohandleChangeTo

例子

function YearMonthPicker({ handleChangeTo }) {
  const [selectedDate, handleDateChange] = useState("2013-01-01");

  return (
    <div className="picker">
      <DatePicker
        openTo="year"
        views={["year", "month"]}
        label="Year and Month"
        helperText="With min and max"
        minDate={new Date("2011-01-01")}
        maxDate={new Date("2018-12-01")}
        value={selectedDate}
        onChange={val => {
          handleDateChange(val);
          handleChangeTo(val);
        }}
      />
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以将此状态保留在父组件中,并将其作为道具传递给子组件YearMonthPicker,而在子组件中根本不具有任何组件状态。