【问题标题】:Capture onChange event from inputComponent passed to OutlinedInput, Material UI从 inputComponent 捕获 onChange 事件传递给 OutlinedInput,Material UI
【发布时间】:2021-07-18 20:31:05
【问题描述】:

我正在尝试将 OutlinedInput 与 KeyboardDatePicker 一起使用,两者都来自 Material UI。我将 DatePicker 作为输入组件传递给 Material UI 的“OutlinedInput”组件。我想知道如何从我传递的 inputComponent 中获取日期。

使用以下代码,我收到“_onChange 不是函数”错误。



    const handleInputChange = (event) => {
        if (event.target.name === "deliveryDate") {
            temp.deliveryDate = event.target.value;
        }
    }


    function datepicker() {
        return <MuiPickersUtilsProvider utils={DateFnsUtils}>
               <KeyboardDatePicker
                    name="deliveryDate"
                    format="MM/dd/yyyy"
                    value={projectDetails.deliveryDate}
                    onChange={props.handleInputChange} />  //not sure if this is how I should write it
               </MuiPickersUtilsProvider>;
    }


return(
    <OutlinedTextBox
          name="deliveryDate"
          id="deliveryDate"
          maxlength={20}
          onChange={handleInputChange}
          inputComponent = {datepicker}   //passing the KeyboardDatePicker as input component
          inputLabel="Delivery Date" />
      )

下面是我的 OutlinedTextBox 组件。它返回

                    <OutlinedInput
                        name={props.name}
                        inputProps={{
                            maxLength: props.maxlength?props.maxlength:100,
                          }}
                        onChange={props.handleInputChange}
                        {...props}
                    />

如何捕捉inputComponent属性的onChange函数。

【问题讨论】:

    标签: reactjs material-ui


    【解决方案1】:

    更新

    根据您在评论中所说的,您实际上需要做的就是编辑您的日期选择器组件。您不需要直接传入值、onChange 或名称,因为当您使用 inputComponent={datepicker} 时,它们已经作为道具传入。所以你需要做的就是声明 props 并将它们全部传播到 KeyboardDatePicker 中。

    const DatePicker = (props) => {
      return (
        <MuiPickersUtilsProvider utils={DateFnsUtils}>
          <KeyboardDatePicker
            format="MM/dd/yyyy"
            {...props}
          />
        </MuiPickersUtilsProvider>
      );
    };
    
    
    

    原始答案

    您可以将inputVariant="outlined"property 添加到KeyboardDatePicker,因为这将使其概述。那么你实际上根本不需要使用 OutlinedInput 组件。

    <KeyboardDatePicker
        name="deliveryDate"
        format="MM/dd/yyyy"
        value={projectDetails.deliveryDate}
        onChange={props.handleInputChange}
        inputVariant="outlined
    />
    
    

    【讨论】:

    • 是的,这是一种解决方法。但我需要遵循一些项目指南并重用现有组件。没有显示整个组件,但我有一个自定义的可重用 OutlinedInput 组件,我也将其用于多个其他表单元素。请为我的问题提供一个确切的解决方案。
    • 刚刚进行了编辑。同样对于未来的问题,如果您确实有必须遵循的特定项目指南和规则等内容,请将它们包含在问题中
    • 您应该只从第一个参数中获取它,因为这就是材质 ui 创建组件的方式。如果您查看 KeyboardDatePicker 的 mui-pickers api,您会看到 onChange 事件仅返回日期。所以没有任何方法可以获取 e.target.value 因为它不存在。此外,您一直在说直接解决方案,但您并没有在问题中准确说明您想要什么,您所要求的只是如何捕获 inputComponent 属性的 onChange 函数。也许将问题扩大一点material-ui-pickers.dev/api/KeyboardDatePicker
    猜你喜欢
    • 2019-06-06
    • 2020-05-27
    • 1970-01-01
    • 2016-10-08
    • 2019-05-25
    • 2020-09-27
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多