2016-01-27 2 views
2

Я пытаюсь создать проверку формы с помощью react-bootstrap и хотел бы избежать создания функции проверки для каждого ввода.Использование переменной как части вызова this.state ReactJS

У меня есть этот вход:

<Input 
    hasFeedback 
    type="text" 
    label="Username" 
    bsStyle={this.state.UsernameStyle} 
    onChange={this.handleChange.bind(this, 'Username')} 
    value={this.state.Username} 
    bsSize="large" 
    ref="inptUser" 
    placeholder="Enter Username" 
/> 

Плюс, у меня есть две функции для обработки проверки и обновления состояния:

handleChange: function(name, e) { 
    var state = {}; 
    state[name] = e.target.value; 
    this.setState(state); 
    var namestyle = name + 'Style'; 
    this.setState(this.validationState(namestyle, e)); 
}, 

&

validationState: function(style, event) { 
    var length = event.target.value.length; 

    if (length > 4) this.setState({style: 'success'}); 
    else if (length > 2) this.setState({style: 'warning'}); 

    return {style}; 
} 

На данный момент если я изменю style до Username Я могу получить этот solutio n для работы с этим конкретным входом. Я мог бы сделать оператор if, и в зависимости от строки, которую я получаю в style, я могу вызвать соответствующее setState, но является ли это лучшим способом сделать это?

Спасибо!

+1

Whoosh Я не думаю, что вы должны называть 'setState' в вашей' функции validationState' ... он должен сделать некоторые проверки и передать результат обратно на оригинал ' setState' в 'handleChange'. Вы уже создали 'setState'. – azium

+0

Ха-ха, ты взломал меня с помощью 'setState'! Я думал о том, как это может вызвать какие-либо проблемы, но пока все работает нормально. Я посмотрю, смогу ли я найти лучшее решение для этого. – ekarni

ответ

0

handleChange должен собрать всю информацию, необходимую для изменения состояния, и позвонить по телефону setState один раз. vaslidationState следует не изменить состояние. Это должно быть просто вернув новый стиль:

validationState(value) { 
    return (value.length > 4) ? "success" : (value.length > 2) ? "warning" : "error"; 
} 

handleChange(name, e) { 
    const value = e.target.value; 
    const style = this.validationState(value); 
    const stateUpdates = { 
     [name]: value, 
     [`${name}Style`]: style 
    }; 
    this.setState(stateUpdates); 
} 
+0

Я заранее извиняюсь за свою неопытность! Я понимаю, что вы делаете в validationState, но мне трудно понять, как 'const stateUpdates = { [name]: value, [" $ {name} Style "]: style }; состояние моих уже существующих переменных, чтобы оно отражалось на входе. Снова извините за мое невежество и благодарю вас за помощь! – ekarni

Смежные вопросы