0
我可以添加输入字段并获取所述字段的状态。我还在每个新字段中添加了一个删除按钮,但无法使删除功能正常工作。如何有选择地删除React中动态添加的输入字段?
我在此处创建删除按钮以及输入字段。
class InputField extends React.Component {
render() {
const { name, onChange } = this.props;
return (
<div className="row">
<div className="input-field col s12">
<label htmlFor={name}>OBR3</label>
<input id={name}
type="text"
className=""
value={this.props.inputValues}
onChange={onChange} />
<button type='delete' value='Delete'
onClick={this.props.handleRemove}>
<i className="material-icons">remove</i>
</button>
</div>
</div>
)
}
}
export class OBR3 extends React.Component {
...
this.state = {
inputValues: {},
inputs: []
...
handleRemove (item, event) {
const newState = this.state.newState
if (newState.indexOf(item) > 1) {
newState.splice(newState.indexOf(item), 1)
}
this.setState({ inputs: newState })
console.log(newState.indexOf(item))
}
handleChange (name, event) {
let inputValues = this.state.inputValues
inputValues[name] = event.target.value
this.setState({ inputValues })
}
该函数实际上添加了输入字段,让我来.bind(this)。不知道,但我认为如果我能够在这里添加删除按钮它可能会解决我的问题?
handleAddInput() {
const name = `OBR3-${(this.state.inputs).length}`;
let inputBox = <InputField key={this.state.inputs.length}
name={name}
onChange={this.handleChange.bind(this, name)} />
const inputs = this.state.inputs
inputs.push(inputBox);
this.setState({ inputs });
}
最后这就是我现在如何渲染一切。
render() {
return (
<div>
<p id='OBR3'>OBR3</p>
<button type='submit' value='Submit'
onClick={this.handleAddInput.bind(this)}>
<i className="material-icons">add</i>
</button>
{this.state.inputs}
</div>
...
通过这些更改,我可以看到子组件中的inputIndex状态。但是,我无法获得该值,并且状态不会被提升到父组件。我可能根本就没有完全理解这个解决方案,但到目前为止,我看起来和以前一样。 – OsoGrizz
我以为'在父组件中处理OBR3OnChange',不是吗? – Andrew