Я пытаюсь использовать пользовательский компонент в качестве поля ввода вact-select.Так как мне нужна проверка, я пытаюсь использовать HTML5 oninvalid
(onInvalid
в JSX) для моего входного тега и установить пользовательское сообщение для oninvalid
.Однако я не могу передать сообщение в качестве опоры компоненту, который я устанавливаю в select.Ниже приведен мой код.
Input.js
import React from "react";
import { components } from "react-select";
export default class Input extends React.Component {
constructor(props) {
super(props);
}
componentDidMount() {
console.log("component mounted");
}
setInvalidMessage = event => {
event.target.setCustomValidity("Custom Message");
};
render() {
if (this.props.isHidden) {
return <components.Input {...this.props} />;
}
return (
<components.Input
{...this.props}
required
onInvalid={this.setInvalidMessage}
/>
);
}
}
example.js
import React from "react";
import Input from "./Input";
import Select from "react-select";
import { colourOptions } from "./docs/data";
const InputBoxWithText = props => {
return <Input {...props} />;
};
export default () => (
<form>
<Select
closeMenuOnSelect={true}
components={{ InputBoxWithText }}
options={colourOptions}
/>
<input type="submit" />
</form>
);
Если я передам атрибут Input в компонентах, я получу жестко закодированное сообщение в Input.js.Если я передаю InputBoxWithText, я вообще не вижу монтирования ввода.
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import Example from './example';
ReactDOM.render(
<Example />,
document.getElementById('root')
);
Вот CodeSandBox.io URL .
Кто-нибудь может дать мне знать, если я что-то не так делаю.