Arrays 在React onClick中从数组中删除当前索引
我还没有反应过来。我构建了一个组件,它在单击时添加了一个输入字段。我需要做的是在每个新输入下面的按钮中添加功能,删除特定的输入。例如,如果创建了3个输入1、2、3,并且删除了输入2,则1和3保持不变 我的代码包含一个名为onRemoveChild()的函数,该函数包含一些我最初尝试使用closest()解决问题时注释掉的代码。问题是状态没有正确更新,因此在删除输入后,字段标签号不同步 提前谢谢,如果需要更多解释,请告诉我Arrays 在React onClick中从数组中删除当前索引,arrays,reactjs,onclick,Arrays,Reactjs,Onclick,我还没有反应过来。我构建了一个组件,它在单击时添加了一个输入字段。我需要做的是在每个新输入下面的按钮中添加功能,删除特定的输入。例如,如果创建了3个输入1、2、3,并且删除了输入2,则1和3保持不变 我的代码包含一个名为onRemoveChild()的函数,该函数包含一些我最初尝试使用closest()解决问题时注释掉的代码。问题是状态没有正确更新,因此在删除输入后,字段标签号不同步 提前谢谢,如果需要更多解释,请告诉我 import React from 'react' import {
import React from 'react'
import {
Button,
TextField,
Typography,
} from '@material-ui/core'
class TextFieldAddNew extends React.Component {
state = {
numChildren: 0
}
render () {
const children = [];
for (var i = 0; i < this.state.numChildren; i += 1) {
children.push(<ChildComponent key={i} number={i+2} removeChild={this.onRemoveChild} />);
};
return (
<ParentComponent addChild={this.onAddChild} theCount={this.state.numChildren}>
{children}
</ParentComponent>
);
}
onAddChild = () => {
this.setState({
numChildren: this.state.numChildren + 1
});
}
onRemoveChild = () => {
document.getElementById('removeInput').closest('div').remove();
}
}
const ParentComponent = (props) => (
<div className="card calculator">
<div id="childInputs">
{props.children}
</div>
{
props.theCount >= 4 ? (
<div className="warning">
We recommend adding no more that 5 opt-in's
</div>
) : ''
}
<Button
className="addInput"
onClick={props.addChild}>
+ Add another option
</Button>
</div>
);
const ChildComponent = (props) => (
<>
<TextField
id={'opt-in-' + props.number}
label={'Opt-in ' + props.number}
name={'opt-in'}
variant="outlined"
size="small"
margin="normal"
color="secondary"
className="halfInput"
/>
<Typography id="removeInput" className="removeInput"
onClick={props.removeChild}>
- Remove option
</Typography>
</>
);
export default TextFieldAddNew;
从“React”导入React
导入{
按钮
TextField,
排版,
}来自“@material ui/core”
类TextFieldAddNew扩展React.Component{
状态={
子女:0
}
渲染(){
const children=[];
对于(变量i=0;i{
这是我的国家({
numChildren:this.state.numChildren+1
});
}
onRemoveChild=()=>{
document.getElementById('removeInput').closest('div').remove();
}
}
常量ParentComponent=(道具)=>(
{props.children}
{
道具数>=4(
我们建议不添加超过5个选择加入
) : ''
}
+添加另一个选项
);
常量ChildComponent=(道具)=>(
-删除选项
);
导出默认文本字段AddNew;
您可以通过调用removeChild传递索引,如下所示:
children.push(<ChildComponent key={i} number={i+2} removeChild={()=>{this.onRemoveChild(i)}}
children.push({this.onRemoveChild(i)}
此外,您还应该保留子节点,而不是将numChildren保持在该状态。这样可以很容易地删除节点并向其中添加节点。然后您可以轻松地执行以下操作:
拼接(i,1),然后更新状态,这样自动渲染将为您更新dom。您可以在调用removeChild时传递索引,如下所示:
children.push(<ChildComponent key={i} number={i+2} removeChild={()=>{this.onRemoveChild(i)}}
children.push({this.onRemoveChild(i)}
此外,您还应该保留子节点,而不是将numChildren保持在该状态。这样可以很容易地删除节点并向其中添加节点。然后您可以轻松地执行以下操作:
儿童.拼接(i,1)然后更新状态,这样自动渲染将为您更新dom。您如何跟踪索引和输入值?您还可以使用它跟踪显示或销毁的内容。您如何跟踪索引和输入值?您还可以使用它跟踪显示的内容被破坏或摧毁。