Реагировать.js: кнопка отключения, когда вход пуст
Я новичок реагировать.js, извините, если вопрос звучит слишком глупо для вас.
Я пытаюсь отключить кнопку, когда поле ввода пусто. Каков самый лучший подход в React для этого?
Я делаю что-то вроде следующего:
<input ref="email"/>
<button disabled={!this.refs.email}>Let me in</button>
это правильно?
это не просто дублирование динамического атрибута, потому что мне также интересно передавать/проверять данные из одного элемента в другой.
2 ответа:
вам нужно будет сохранить текущее значение входного сигнала в состоянии (или передать изменения в его значении до родителей через функцию обратного вызова или сторону или таким образом, что он в конечном итоге возвращается в ваш компонент в качестве опоры), поэтому вы можете получить отключенную опору для кнопки.
пример использования состоянии:
<meta charset="UTF-8"> <script src="https://fb.me/react-0.13.3.js"></script> <script src="https://fb.me/JSXTransformer-0.13.3.js"></script> <div id="app"></div> <script type="text/jsx;harmony=true">void function() { "use strict"; var App = React.createClass({ getInitialState() { return {email: ''} }, handleChange(e) { this.setState({email: e.target.value}) }, render() { return <div> <input name="email" value={this.state.email} onChange={this.handleChange}/> <button type="button" disabled={!this.state.email}>Button</button> </div> } }) React.render(<App/>, document.getElementById('app')) }()</script>
использование констант позволяет объединить несколько полей для проверки:
class LoginFrm extends React.Component { constructor() { super(); this.state = { email: '', password: '', }; } handleEmailChange = (evt) => { this.setState({ email: evt.target.value }); } handlePasswordChange = (evt) => { this.setState({ password: evt.target.value }); } handleSubmit = () => { const { email, password } = this.state; alert(`Welcome ${email} password: ${password}`); } render() { const { email, password } = this.state; const enabled = email.length > 0 && password.length > 0; return ( <form onSubmit={this.handleSubmit}> <input type="text" placeholder="Email" value={this.state.email} onChange={this.handleEmailChange} /> <input type="password" placeholder="Password" value={this.state.password} onChange={this.handlePasswordChange} /> <button disabled={!enabled}>Login</button> </form> ) } } ReactDOM.render(<LoginFrm />, document.body);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <body> </body>