С использованием миксинов реактивного компонента в стиле es6

Я использую компонент:- https://github.com/christianalfoni/formsy-react, для создания форм. Я пытаюсь создать один из моих собственных компонентов ввода. Итак, как уже упоминалось, мне нужно использовать Mixin Форми. Но, к сожалению, его нет в стиле es6. Так что любая работа вокруг кого-либо знает.

вот мой код компонента:-

import Formsy from 'formsy-react';

class DropDownAutoComplete extends React.Component {

    constructor(props, context) {
        super(props, context);

       this.mixins = [Formsy.Mixin];
    }

    changeValue(event) {
        this.mixins[0].setValue(event.currentTarget.value);
    }

    handleValue1Change(value) {
        this.setState({value: value});
    }

    render() {

        const className = this.mixins[0].showRequired() ? 'required' : this.mixins[0].showError() ? 'error' : null;

        // An error message is returned ONLY if the component is invalid
        // or the server has returned an error message
        const errorMessage = this.mixins[0].getErrorMessage();
        return <DropdownList
            data={this.props.dropDownConfigs.value}
            onChange={this.changeValue.bind(this)}
            textField={this.props.dropDownConfigs.name}
            caseSensitive={false}
            filter='contains'>
                        </DropdownList>
    }

}

ошибка при вызове функции showRequired. По-видимому, его реализация использует некоторые переменные состояния, такие как обязательные.

2 ответа

По своей природе миксины не работают с классами ES6 - попытки взломать что-то вместе просто вызовут у вас головную боль!

Одним из решений является использование так называемого компонента более высокого порядка - функции, которая принимает компонент и возвращает новый компонент, который оборачивается вокруг него. Эти компоненты обертки могут иметь собственные хуки жизненного цикла и могут передавать реквизиты обернутым компонентам, эффективно предоставляя вам те же функциональные возможности, которые даст вам миксин, но, возможно, более чистым способом!

formsy-react позволяет использовать этот подход, предоставляя свой собственный HOC:

import {HOC} from 'formsy-react';

class MyInput extends React.Component {
  render() {
    return (
      <div>
        <input value={this.props.getValue()} onChange={(e) => this.props.setValue(e.target.value)}/>
      </div>
    );
  }
};
export default HOC(MyInput);

Вы можете использовать реактив-миксин-декоратор.

Цитата из README:

Если вы создаете компоненты React с использованием классов ES6 и хотите использовать существующие миксины для добавления приятной функциональности вашему компоненту, вы, вероятно, не хотите тратить время на преобразование микшинов во что-то, что в вашем классе компонентов ES6 React. мог бы использовать.

Другие вопросы по тегам