Пользовательское поле ввода в DatePicker - PullRequest
0 голосов
/ 17 мая 2018

Я реализовал в своем приложении response-datepicker.

все отлично, кроме того, что я хочу настроить поле ввода DatePicker и адаптировать его к другим моим настраиваемым полям, таким как ввод названия.

когда я изменяю средство выбора даты через поле

customInput={<Input />}

, его внешний вид изменился, но я больше не могу выбирать даты (средство выбора больше не работает).

вот мой код:

<DatePicker
    customInput={<Input />}
    dateFormat="DD.MM.YYYY"
    selected=...
    onChange=...

/>

есть идеи?

    export namespace Input { 
        export interface Props { 
            onChange: (event: any) => void; 
            placeholder?: string; 
            value?: string | number; 
            isSecure?: any; 
            id?: string; 
        }

        // ...
    } 

Итак, я добавил событие часов следующим образом:

    export namespace Input {
        export interface Props {
            onChange: (event: any) => void;
            placeholder?: string;
            value?: string | number;
            isSecure?: any;
            id?: string;
            onClick: (event: any) => void;
        }
    }

это правильно?

компоненткод:

export class Input extends React.Component<Input.Props, Input.State> {
  public render() {
    const controlClass = classNames(
      [style.control]
    );
    const inputClass = classNames(
      [style.input]
    );
    return (
      <p className={controlClass} >
        <input
          id={this.props.id}
          onChange={this.props.onChange}
          className={inputClass}
          type={this.props.isSecure ? "password" : "text"}
          placeholder={this.props.placeholder}
          value={this.props.value}
        />
      </p>
    );
  }
}

1 Ответ

0 голосов
/ 17 мая 2018

Ваш Input компонент должен реализовать событие onClick и сделать его доступным в качестве реквизита, потому что именно это запускает средство выбора даты, чтобы открыть себя.

const Input = ({onChange, placeholder, value, isSecure, id, onClick}) => (
    <input
        onChange={onChange}
        placeholder={placeholder}
        value={value}
        isSecure={isSecure}
        id={id}
        onClick={onClick}
    />
);

const NoClickInput = ({onClick, ...props}) => <Input {...props} />;

class App extends Component {
    state = {
        value: moment(),
    };

    render() {
        return (
            <div>
                <DatePicker
                    value={this.state.value}
                    dateFormat="DD.MM.YYYY"
                    customInput={<Input />}
                    selected={this.state.date}
                    onChange={date => this.setState({date})}
                />
                <DatePicker
                    value={this.state.value}
                    dateFormat="DD.MM.YYYY"
                    customInput={<NoClickInput />} {/* Will not work */}
                    selected={this.state.date}
                    onChange={date => this.setState({date})}
                />
            </div>
        );
    }
}

Edit q7j9jl75pj

EDIT

Возможный обходной путь, не затрагивая реализацию вашего Input компонента, заключался бы в том, чтобы поместить его в контейнер и обработать щелчок по нему:

const ClickableInput = ({onClick, ...props}) => (
    <div onClick={onClick}>
        <Input {...props}>
    </div>
);

Затем используйте ClickableInput вместо Input в качестве пользовательского ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...