Мы оборачиваем поля формы в их собственные компоненты, которые содержат их логику проверки. пример
Имя пользователяInput.js
class UsernameInput extends Component {
render() {
return this.props.form.getFieldDecorator(this.props.id, {
rules: [...]
})(InputComponent);
}
}
И мы хотим использовать их в наших формах вот так
// imports here
class CustomForm {
render() {
return (<Form>
<Form.Item>
<UsernameInput form={this.props.form} />
</Form.Item>
</Form>);
}
}
export default Form.create()(CustomForm);
Это не работает, потому что FormItem.getControls не определяет компонент как элемент управления. Просто видит обертку как UsernameInput.
FormItem
для обнаружения UsernameInput
и работы как любой элемент управления вводом. Показывать сообщения об ошибках, отзывы, справки и т. Д.
FormItem
не находит элемент управления внутри.
Решить этот вопрос сложно. Не могли бы вы выложить здесь свой совет (как реализовать), если есть?
Мы решили это, вызвав компонент как функцию
CustomForm.js
// imports here
class CustomForm {
render() {
return (<Form>
<Form.Item>
{UsernameInput({ form: this.props.form })}
</Form.Item>
</Form>);
}
}
export default Form.create()(CustomForm);
Но если вы открыты для идей, я думаю, что возможным решением было бы определить контекст в FormItem
и Input
могут регистрироваться, когда он присутствует. пример
FormItem.js
class FormItem extends Component {
static childContextTypes = {
registerControl: PropTypes.func
};
getChildContext() {
return { registerControl: this.registerControl };
}
registerControl(control) {
this.controls.push(control);
}
}
Input.js
class Input extends Component {
static contextTypes = {
registerControl: PropTypes.func
};
componentDidMount() {
if (this.context.registerControl) {
this.registerControl(this);
}
}
}
Я постараюсь найти решение.
@gaastonsr может ли вы показать весь свой код о UsernameInput с помощью этого обходного пути?
@gaastonsr Ваше решение мне очень помогает!
Это все еще актуальная проблема? Предложение контекста мне нравится.
Только что столкнулся с этим сегодня на [email protected]. По-прежнему проблема. Обходной путь функции
Привет @gaastonsr. Нам очень нравится ваше предложение / отзыв, добро пожаловать, чтобы отправить нам запрос на слияние. Пожалуйста, отправьте запрос на слияние в соответствующую ветку (ветвь функции для новой функции, мастер для исправления ошибок и других изменений), заполните [Шаблон запроса на слияние ] здесь, при необходимости предоставьте список изменений / TypeScript / документацию / тестовые примеры и убедитесь, что CI прошел, мы скоро его рассмотрим. Цените его заранее, и мы ждем вашего сообщения!
Здравствуйте, @gaastonsr, мы полностью согласны с вашим предложением / создавать на этом складе включение для решения этой проблемы. Отправьте запрос на слияние в правильную ветку (новые функции в ветку функций, другие в главную ветвь), обязательно заполните предустановленный шаблон в запросе слияния и предоставьте соответствующий журнал изменений, определения TypeScript, тестовые примеры, документы и т. Д., Необходимые для изменений , И чтобы убедиться, что CI пройден, мы рассмотрим как можно скорее, заранее благодарим вас и с нетерпением ждем вашего вклада!
Пожалуйста, проверьте новый компонент формы в antd v4, форма v3 не будет поддерживаться в ближайшее время.
Самый полезный комментарий
Мы решили это, вызвав компонент как функцию
CustomForm.js
Но если вы открыты для идей, я думаю, что возможным решением было бы определить контекст в
FormItem
иInput
могут регистрироваться, когда он присутствует. примерFormItem.js
Input.js