首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有反应钩子形式和反应输入掩码的矩阵用户界面不起作用

带有反应钩子形式和反应输入掩码的矩阵用户界面不起作用
EN

Stack Overflow用户
提问于 2021-03-12 14:37:24
回答 1查看 4.1K关注 0票数 1

这个代码不起作用,一直在尝试多个版本,有人能帮忙吗?它会产生一个错误,从控制到非控制,加上面具根本不工作,我错过了什么?

https://github.com/react-hook-form/react-hook-form/issues/1255

下面是一个代码框:https://codesandbox.io/s/sad-shamir-nnh0c?fontsize=14&hidenavigation=1&theme=dark

代码语言:javascript
复制
import React, { useState } from 'react'
import { TextField } from '@material-ui/core'
import InputMask from 'react-input-mask'
import { useFormContext, Controller} from 'react-hook-form'

const PhoneInputMask = (props) => {
  const { inputRef, ...other } = props;
  return (
    <InputMask
      {...other}
      mask={['(' , '+', /[3]/, /[5-8]/, /[1-9]/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]}
      inputRef={inputRef}
      alwaysShowMask={true}
    />
  )
}


const PhoneInput = (props) => {
  const [textMask, setTextMask] = useState()
  const handleChange = (event) => setTextMask(event.target.value)
  const { errors, register, control } = useFormContext()

  const { name, label, registerContext } = props
  return (
    <Controller
      name={name}
      control={control}
      defaultValue=""
      render={props => (
      <TextField
        margin="normal"
        InputProps={{
          inputComponent: PhoneInputMask,
          value:textMask,
          onChange: handleChange,
        }}
        name={name}
        id={name}
        inputRef={register(registerContext)}
        label={label}
        error={!!errors[name]}
        helperText={(errors[name]) ? errors[name].message : null}
      />)}
    />
  )
}

export default PhoneInput
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-11 19:50:00

代码语言:javascript
复制
<Controller
    name="phone"
    control={control}
    defaultValue=""
    render={({ field: { onChange, value } }) => (
        <InputMask mask="+999999999999" value={value} onChange={onChange}>
            {
                inputProps => (
                    <TextField
                        error={!!errors.phone?.message}
                        label="Phone"
                        variant="outlined"
                        type="text"
                        fullWidth
                        required
                        {...inputProps}
                    />
                )
            }
        </InputMask>
    )}
/>

对于从受控值到非控制值的错误,您需要添加defaultValue=""

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66601928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档