react-bootstrap: 清除元素值
react-bootstrap: clear element value
我正在尝试在 onClick
事件后清除我的输入字段。
我正在使用 react-bootstrap
库,虽然有 getValue()
方法,但没有 setValue(value)
方法。
我偶然发现了这个discussion。
我不完全理解他们的建议,以便在提交后简单地清理表单。
毕竟,如果我使用简单的 HTML <input>
而不是 react-bootstrap
我可以通过元素 ref
获取节点并将其值设置为空字符串或其他东西。
什么被认为是清理我的反应-bootstrap <Input />
元素的反应方式?
将状态存储在你的 React 组件中,通过 props 设置元素值,通过事件回调获取元素值。这是一个例子:
这是直接取自他们的文档的示例。我刚刚添加了一个 clearInput()
方法来向您展示您可以通过更新组件的状态来清除输入。这将触发重新渲染,这将导致输入值更新。
const ExampleInput = React.createClass({
getInitialState() {
return {
value: ''
};
},
validationState() {
let length = this.state.value.length;
if (length > 10) return 'success';
else if (length > 5) return 'warning';
else if (length > 0) return 'error';
},
handleChange() {
// This could also be done using ReactLink:
// http://facebook.github.io/react/docs/two-way-binding-helpers.html
this.setState({
value: this.refs.input.getValue()
});
},
// Example of how you can clear the input by just updating your state
clearInput() {
this.setState({ value: "" });
},
render() {
return (
<Input
type="text"
value={this.state.value}
placeholder="Enter text"
label="Working example with validation"
help="Validation is based on string length."
bsStyle={this.validationState()}
hasFeedback
ref="input"
groupClassName="group-class"
labelClassName="label-class"
onChange={this.handleChange} />
);
}
});
对于我目前正在做的事情,我真的认为没有必要通过 setState/Flux 来控制输入组件的值(也就是我不想处理所有的样板文件) ...所以这是我所做的要点。希望React大神见谅
import React from 'react';
import { Button, Input } from 'react-bootstrap';
export class BootstrapForm extends React.Component {
constructor() {
super();
this.clearForm = this.clearForm.bind(this);
this.handleSave = this.handleSave.bind(this);
}
clearForm() {
const fields = ['firstName', 'lastName', 'email'];
fields.map(field => {
this.refs[field].refs['input'].value = '';
});
}
handleSubmit() {
// Handle submitting the form
}
render() {
return (
<div>
<form>
<div>
<Input
ref='firstName'
type='text'
label='First Name'
placeholder='Enter First Name'
/>
<Input
ref='lastName'
type='text'
label='Last Name'
placeholder='Enter Last Name'
/>
<Input
ref='email'
type='email'
label='E-Mail'
placeholder='Enter Email Address'
/>
<div>
<Button bsStyle={'success'} onClick={this.handleSubmit}>Submit</Button>
<Button onClick={this.clearForm}>Clear Form</Button>
</div>
</div>
</form>
</div>
);
}
}
你也可以只使用 ReactDOM:
<FormControl
componentClass="select"
ref="sStrike">
<option value="-">Select…</option>
<option value="1">1</option>
<option value="2">2</option>
</FormControl>
现在,不同的 FormControl 会触发 onChange={handleChange}
,在该处理程序中,您只需识别 ref
并设置为默认值:
ReactDOM.findDOMNode(this.refs.sStrike).value = '-';
这会将 select 框设置为 'default' 值。
如果你使用 FormControl 作为输入,并且你想使用 ref 到它的 change/get 值,你使用 inputRef 而不是 ref
<FormControl inputRef={input => this.inputText = input} .../>
并将其用于 get/change 其值:
this.inputText.value
这对我有用,以防其他人正在寻找答案:D
您可以使用
访问 react-bootstrap 的值
console.log(e.target.form.elements.fooBar.value)
您可以使用
清除它们
e.target.form.elements.fooBar.value = ""
import React from 'react';
import {Button, Form} from 'react-bootstrap';
export default function Example(props) {
const handleSubmit = (e) => {
// Handle submitting the form
}
const resetSearch = (e) => {
e.preventDefault();
e.target.form.elements.fooBar.value = ""
}
render() {
return (
<Form onSubmit={handleSubmit} onReset={resetSearch} >
<Form.Control type="input" name="fooBar" />
<Button type="submit"> Submit </Button>
<Button onClick={resetSearch} type="submit" > Reset </Button>
</Form>
);
}
}
我正在尝试在 onClick
事件后清除我的输入字段。
我正在使用 react-bootstrap
库,虽然有 getValue()
方法,但没有 setValue(value)
方法。
我偶然发现了这个discussion。
我不完全理解他们的建议,以便在提交后简单地清理表单。
毕竟,如果我使用简单的 HTML <input>
而不是 react-bootstrap
我可以通过元素 ref
获取节点并将其值设置为空字符串或其他东西。
什么被认为是清理我的反应-bootstrap <Input />
元素的反应方式?
将状态存储在你的 React 组件中,通过 props 设置元素值,通过事件回调获取元素值。这是一个例子:
这是直接取自他们的文档的示例。我刚刚添加了一个 clearInput()
方法来向您展示您可以通过更新组件的状态来清除输入。这将触发重新渲染,这将导致输入值更新。
const ExampleInput = React.createClass({
getInitialState() {
return {
value: ''
};
},
validationState() {
let length = this.state.value.length;
if (length > 10) return 'success';
else if (length > 5) return 'warning';
else if (length > 0) return 'error';
},
handleChange() {
// This could also be done using ReactLink:
// http://facebook.github.io/react/docs/two-way-binding-helpers.html
this.setState({
value: this.refs.input.getValue()
});
},
// Example of how you can clear the input by just updating your state
clearInput() {
this.setState({ value: "" });
},
render() {
return (
<Input
type="text"
value={this.state.value}
placeholder="Enter text"
label="Working example with validation"
help="Validation is based on string length."
bsStyle={this.validationState()}
hasFeedback
ref="input"
groupClassName="group-class"
labelClassName="label-class"
onChange={this.handleChange} />
);
}
});
对于我目前正在做的事情,我真的认为没有必要通过 setState/Flux 来控制输入组件的值(也就是我不想处理所有的样板文件) ...所以这是我所做的要点。希望React大神见谅
import React from 'react';
import { Button, Input } from 'react-bootstrap';
export class BootstrapForm extends React.Component {
constructor() {
super();
this.clearForm = this.clearForm.bind(this);
this.handleSave = this.handleSave.bind(this);
}
clearForm() {
const fields = ['firstName', 'lastName', 'email'];
fields.map(field => {
this.refs[field].refs['input'].value = '';
});
}
handleSubmit() {
// Handle submitting the form
}
render() {
return (
<div>
<form>
<div>
<Input
ref='firstName'
type='text'
label='First Name'
placeholder='Enter First Name'
/>
<Input
ref='lastName'
type='text'
label='Last Name'
placeholder='Enter Last Name'
/>
<Input
ref='email'
type='email'
label='E-Mail'
placeholder='Enter Email Address'
/>
<div>
<Button bsStyle={'success'} onClick={this.handleSubmit}>Submit</Button>
<Button onClick={this.clearForm}>Clear Form</Button>
</div>
</div>
</form>
</div>
);
}
}
你也可以只使用 ReactDOM:
<FormControl
componentClass="select"
ref="sStrike">
<option value="-">Select…</option>
<option value="1">1</option>
<option value="2">2</option>
</FormControl>
现在,不同的 FormControl 会触发 onChange={handleChange}
,在该处理程序中,您只需识别 ref
并设置为默认值:
ReactDOM.findDOMNode(this.refs.sStrike).value = '-';
这会将 select 框设置为 'default' 值。
如果你使用 FormControl 作为输入,并且你想使用 ref 到它的 change/get 值,你使用 inputRef 而不是 ref
<FormControl inputRef={input => this.inputText = input} .../>
并将其用于 get/change 其值:
this.inputText.value
这对我有用,以防其他人正在寻找答案:D
您可以使用
访问 react-bootstrap 的值console.log(e.target.form.elements.fooBar.value)
您可以使用
清除它们e.target.form.elements.fooBar.value = ""
import React from 'react';
import {Button, Form} from 'react-bootstrap';
export default function Example(props) {
const handleSubmit = (e) => {
// Handle submitting the form
}
const resetSearch = (e) => {
e.preventDefault();
e.target.form.elements.fooBar.value = ""
}
render() {
return (
<Form onSubmit={handleSubmit} onReset={resetSearch} >
<Form.Control type="input" name="fooBar" />
<Button type="submit"> Submit </Button>
<Button onClick={resetSearch} type="submit" > Reset </Button>
</Form>
);
}
}