首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于react final-form,为什么第三方组件的meta.touched总是假的?

对于react final-form,为什么第三方组件的meta.touched总是假的?
EN

Stack Overflow用户
提问于 2018-08-10 06:52:44
回答 1查看 4.6K关注 0票数 18

使用final-form,我有一个第三方输入组件。我已经为它写了一个适配器。它也有一个验证器,但是meta.touched总是假的。我尝试将onFocus事件向上传播到输入,但没有成功。我做错了什么?

代码语言:javascript
复制
const requiredValidator = value => (value ? undefined : 'is required');

const FloatingLabelInputAdapter = ({ input, meta, ...rest }) => (
  <FloatingLabelInput
    {...rest}
    onChange={(event) => input.onChange(event)}
    onFocus={(event) => input.onFocus(event)}
    errorText={meta.touched ? meta.error : ''}
  />
)

// used like this:

<Field
  component={FloatingLabelInputAdapter}
  label="Email"
  name="email"
  type="text"
  validate={requiredValidator}
/>

// and here's the render() of the component


  render() {
    const { children, label } = this.props;
    const { focussing, used } = this.state;

    console.log('FloatingLabelInput.props', this.props);

    return (
      <Group {...this.props} >
        <TextInput
          focussing={focussing}
          innerRef={(comp) => { this.input = comp }}
          onFocus={this.onFocusHandle}
          onBlur={this.onBlurHandle}
          onChange={this.onChange}
          type={this.props.type} />

        <Label
          focussing={focussing}
          used={used}>

          {label}
        </Label>

        <Bar focussing={focussing} />
      </Group>
    );
  }
}
EN

回答 1

Stack Overflow用户

发布于 2018-08-10 21:15:49

像往常一样,我回答自己的问题。

我还必须传播onBlur()事件,这是有意义的,因为touched文档说,只有在用户输入并将焦点放在输入上之后,它才是真的。

代码语言:javascript
复制
<FloatingLabelInput
   ...
   onBlur={(event) => input.onBlur(event)}
/>
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51776786

复制
相关文章

相似问题

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