javascript - default value for multiple select in form antd 4 - Stack Overflow

I'm unable to set default value for multi select inside form.Use Case:I have created a react pone

I'm unable to set default value for multi select inside form.

Use Case: I have created a react ponent that renders a select with some default props that I need in every form. Now I want to set default value for that select from the defaultValue prop of select instead of passing initialValues to every form.

My react ponent looks like:

import React, { Component } from 'react';
import { Form, Select } from 'antd';

class FormSelect extends Component {
  render() {
    const {name, label, rules, onSelect, disabled, options, mode} = this.props;

    let defaultValue;
    if (mode === 'tags' || mode === 'multiple'){
      defaultValue = [];
    }

    return (
      <Form.Item
        hasFeedback
        name={name}
        label={label}
        rules={rules}
      >
        <Select
          showSearch
          mode={mode}
          tokenSeparators={[',']}
          defaultValue={defaultValue}
          onSelect={onSelect}
          disabled={disabled}
        >
          {
            options.map((op) => (
              <Select.Option key={op.value} value={op.value} label={op.label}>
                {op.label}
              </Select.Option>
            ))
          }
        </Select>
      </Form.Item>
    );
  }
}
export default FormSelect;

The problem is when I set the defaultValue prop of select the value is shown in UI but when the form is submitted the defaultValue is ignored and value of select field remains undefined

I'm unable to set default value for multi select inside form.

Use Case: I have created a react ponent that renders a select with some default props that I need in every form. Now I want to set default value for that select from the defaultValue prop of select instead of passing initialValues to every form.

My react ponent looks like:

import React, { Component } from 'react';
import { Form, Select } from 'antd';

class FormSelect extends Component {
  render() {
    const {name, label, rules, onSelect, disabled, options, mode} = this.props;

    let defaultValue;
    if (mode === 'tags' || mode === 'multiple'){
      defaultValue = [];
    }

    return (
      <Form.Item
        hasFeedback
        name={name}
        label={label}
        rules={rules}
      >
        <Select
          showSearch
          mode={mode}
          tokenSeparators={[',']}
          defaultValue={defaultValue}
          onSelect={onSelect}
          disabled={disabled}
        >
          {
            options.map((op) => (
              <Select.Option key={op.value} value={op.value} label={op.label}>
                {op.label}
              </Select.Option>
            ))
          }
        </Select>
      </Form.Item>
    );
  }
}
export default FormSelect;

The problem is when I set the defaultValue prop of select the value is shown in UI but when the form is submitted the defaultValue is ignored and value of select field remains undefined

Share Improve this question edited Dec 26, 2019 at 6:15 Piyush Kakkar asked Dec 25, 2019 at 10:08 Piyush KakkarPiyush Kakkar 891 gold badge1 silver badge6 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 1

Form.Item now supports initialValue prop in version 4.2.2 which can be used to set default value.

If I get your question right, you need to do something like this in the callback of your options.map():

<Select.Option
  selected={op.value === this.props.defaultValue ? true : false}
  key={op.value}
  value={op.value}
  label={op.label}>
    {op.label}
</Select.Option>

Explanation: If op.value of an option is equal to the defaultValue passed as props, that option will be selected by default.

React is smart enough to know whether to add selected attribute to a particular option or not based upon its value being true or false.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745271360a4619765.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信