【问题标题】:How to use material-ui-pickers's date picker with ReactJS's State Hook and pass date to the parent component?如何使用 Material-ui-pickers 的日期选择器和 ReactJS 的 State Hook 并将日期传递给父组件?
【发布时间】:2019-08-08 07:37:11
【问题描述】:

我正在尝试使用material-ui-pickers's date picker,其中示例演示是使用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;

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

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

handleChangeTo = e => {
    this.setState({ dateTo: e.target.value });
};

而且,在渲染方法中,我试图这样称呼它:

<YearMonthPicker handleChangeTo={this.handleChangeTo} />

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

【问题讨论】:

    标签: reactjs material-ui react-hooks


    【解决方案1】:

    您可以创建一个新函数,从道具调用handleDataChangehandleChangeTo,而不是直接使用handleDataChange 作为onChange 的处理程序。然后handleChangeTo 将直接获取值,而不是事件。

    示例

    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>
      );
    }
    

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

    【讨论】:

    • 您的意思是props.handleChangeTo(val); 而不是handleChangeTo(val);?另外,关于“handleChangeTo 将直接获取值,而不是事件”,我不确定我是否遵循,如何从父组件获取日期?
    猜你喜欢
    • 2016-10-08
    • 2020-12-09
    • 2022-08-03
    • 2022-07-23
    • 2022-08-10
    • 2018-10-23
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    相关资源
    最近更新 更多