AntDesign getFieldDecorator 获取自定义组件的值

AntDesign getFieldDecorator 获取自定义组件的值

1.自定义或第三方的表单控件,也可以与 Form 组件一起使用。只要该组件遵循以下的约定:

(1)提供受控属性 value 或其它与 valuePropName 的值同名的属性。

(2)提供 onChange 事件或 trigger 的值同名的事件。

(3)不能是函数式组件。

2.创建组件

这里通过自定义的搜索输入框来展示

let timeout;
let currentValue;
function fetch(value, callback) {
  if (timeout) {
    clearTimeout(timeout);
    timeout = null;
  }
  currentValue = value;
  function getData() {
    const params = {
      size: 10,
      name: value
    };
    apiSubwayList(params).then(
      d => {
        if (currentValue === value) {
          const result = d.list;
          const data = [];
          result.forEach(r => {
            data.push({
              value: r.subwayId,
              text: r.name,
            });
          });
          callback(data);
        }
      }
    );
  }
  timeout = setTimeout(getData, 300);
}
class SearchInput extends PureComponent {
  state = {
    data: [],
    value: undefined
  };
  handleSearch = value => {
    fetch(value, data => this.setState({data}));
  };
  handleChange = value => {
    this.setState({value});
    this.props.onChange(value)
  };
  render() {
    const options = this.state.data.map(d => <Option key={d.value}>{d.text}</Option>);
    return (
      <div>
      <Select
        showSearch
        value={this.state.value}
        placeholder={this.props.placeholder}
        // style={this.props.style}
        defaultActiveFirstOption={false}
        showArrow={false}
        filterOption={false}
        onSearch={this.handleSearch}
        onChange={this.handleChange}
        notFoundContent={null}
      >
        {options}
      </Select>
      <span>输入并选择对应选项,否则无效</span>
      </div>
    )
  }
}
SearchInput.propTypes = {
  data: PropTypes.array,
  value: PropTypes.string,
  onChange: PropTypes.func
};
export default SearchInput;

可以看到,使用getFieldDecorator时,会通过props的形式向自定义的组件传入onChange回调方法,使用这个回调函数会通知getFieldDecorator所绑定字段的值的变化。

3.使用组件

<FormItem
    {...formItemLayout}
    label={<span>所在地铁站</span>}
>
    {getFieldDecorator('owner', {
     rules: [{
              required: true,
              message: '请选择所在地铁站',
              },
            ],
    })(
    <SearchInput placeholder="输入并选择所属地铁"/>)}
</FormItem>

使用getFieldDecorator会隐式的传入onChange回调方法,当然,如果想传入其他参数,也可以像placeholder那样显示的传入。

原文地址:https://www.cnblogs.com/tian874540961/p/10975409.html

时间: 2024-12-17 04:33:43

AntDesign getFieldDecorator 获取自定义组件的值的相关文章

Flex4.6 DataGrid自定义ComboBox并获取自定义ComboBox的值

最近,项目需求需要在DataGrid上动态生成GridColumn以及设置其为ComboBox,默认是为TextInput. Flex 4.6使用s:DataGrid组件而不是mx:DataGrid,网上很多资料都是mx组件的,于是写了这篇文章. 首先,s:DataGrid的标题栏存储的对象是GridColumn. 标题栏动态添加函数 <span style="font-family:Microsoft YaHei;font-size:18px;"> var columns

antd 父组件获取子组件中form表单的值

还是拿代码来讲吧,详情见注释 子组件 import React, { Component } from 'react'; import { Form, Input } from 'antd'; const FormItem = Form.Item; class Forms extends Component{ getItemsValue = ()=>{ //3.自定义方法,用来传递数据(需要在父组件中调用获取数据) const valus= this.props.form.getFieldsVa

在自定义组件中获取spring底层组件

要想在自定义组件中获取spring底层的各种组件,只需让自定义组件实现一系列接口即可,这些接口都是Aware的子接口.常见的有: 1. ApplicationContextAware——用于获取IOC容器: 2. BeanNameAware——用于获取bean的名称: 3. EmbeddedValueResolverAware——用于获取字符串解析器,可以解析各种占位符,例如${}.$#{}等. 示例代码如下,自定义bean类实现了三种Aware接口 public class Candy imp

DWZ-JUI 树形Checkbox组件 无法一次获取所有选中的值的解决方法

UI中 tree Checkbox 组件 在官方文档中提供的oncheck事件中只能够获取当前点击的权限值,而无法获取其他选中的值 <ul class="tree treeFolder treeCheck expand" oncheck="kkk"><li><a >框架面板</a><ul><li><a tname="name" tvalue="value1&q

C# 如何获取自定义的config中节点的值,并修改节点的值

现定义一个方法 DIYConfigHelper.cs using System; using System.Xml; using System.Configuration; using System.Reflection; using System.Web; using System.IO; namespace Chain.Common { /// <summary> /// Summary description for ReadWriteConfig. /// </summary&g

VUE里子组件获取父组件动态变化的值

在VUE里父组件给子组件间使用props方式传递数据,但是希望父组件的一个状态值改变然后子组件也能监听到这个数据的改变来更新子组件的状态. 场景:子组件通过props获取父组件传过来的数据,子组件存在操作传过来的数据并且传递给父组件. 比如想实现一个switch开关按钮的公用组件: 1.父组件可以向按钮组件传递默认值. 2.子组件的操作可以改变父组件的数据. 3.父组件修改传递给子组件的值,子组件能动态监听到改变. 比如父组件点击重置,开关组件的状态恢复为关闭状态: 方法1: 1.因为存在子组件

Android 疑难杂症之获取listView Item上面组件的值

其实思路就是重新findById一次 获取其中组建的值,比如应用场景是 长按点击事件 获取文件夹名字 @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { TextView viewById = (TextView) view.findViewById(R.id.directory_item_name); String s = viewById.getTe

【REACT NATIVE 系列教程之二】创建自定义组件&&导入与使用示例

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/react-native/2219.html 在上一篇  [REACT NATIVE 系列教程之一]触摸事件的两种形式与四种TOUCHABLE组件详解 中的最后介绍了如何使用Touchable的四种组件进行监听触摸事件.  那么紧接着我们利用Touchable来包装一个带图片的Button组件,且设计成可接受很多自定义参数. 一:创建我们自定义

Flex自定义组件开发之日周月日期选择日历控件

原文:Flex自定义组件开发之日周月日期选择日历控件 使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的任一位置单击时,将弹出一个 DateChooser 控件,显示当月的所有日期.如果未选择日期,则该文本字段为空白,并且 DateChooser 控件中将显示当前日期的月份.当 DateChooser 控件处于打开状态时,用户可以在各个月份和年份之间滚动,并选择某个日期.选择日期后,DateChooser 控件关闭,