Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在React onClick中从数组中删除当前索引_Arrays_Reactjs_Onclick - Fatal编程技术网

Arrays 在React onClick中从数组中删除当前索引

Arrays 在React onClick中从数组中删除当前索引,arrays,reactjs,onclick,Arrays,Reactjs,Onclick,我还没有反应过来。我构建了一个组件,它在单击时添加了一个输入字段。我需要做的是在每个新输入下面的按钮中添加功能,删除特定的输入。例如,如果创建了3个输入1、2、3,并且删除了输入2,则1和3保持不变 我的代码包含一个名为onRemoveChild()的函数,该函数包含一些我最初尝试使用closest()解决问题时注释掉的代码。问题是状态没有正确更新,因此在删除输入后,字段标签号不同步 提前谢谢,如果需要更多解释,请告诉我 import React from 'react' import {

我还没有反应过来。我构建了一个组件,它在单击时添加了一个输入字段。我需要做的是在每个新输入下面的按钮中添加功能,删除特定的输入。例如,如果创建了3个输入1、2、3,并且删除了输入2,则1和3保持不变

我的代码包含一个名为onRemoveChild()的函数,该函数包含一些我最初尝试使用closest()解决问题时注释掉的代码。问题是状态没有正确更新,因此在删除输入后,字段标签号不同步

提前谢谢,如果需要更多解释,请告诉我

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。

您如何跟踪索引和输入值?您还可以使用它跟踪显示或销毁的内容。您如何跟踪索引和输入值?您还可以使用它跟踪显示的内容被破坏或摧毁。